C# 文件操作

在.NET FrameWork中进行的所有输入输出都要使用到流,流是抽象串行化设备,可以以线性方式存储数据,并可以以同样方式访问:一次访问一个字节。

此设备可以是磁盘文件,打印机,内存位置和任何其他支持以线性方式读写的对象。

当向某些外部目标写数据时,就要用到输出流,这可以是物理磁盘文件,网络位置,打印机或者其他程序。

常用的类:

File----实用类,提供许多静态方法,用于移动、删除、和复制文件。

Dictionary ----实用类,提供许多静态方法,用于移动、删除、和复制目录。

Path ----实用类,用于处理路径名称。

FileInfo ----表示磁盘上的物理文件,具有可以处理此文件的方法,要完成对文件的读写工作,就必须创建Stream对象。

DictionaryInfo ----表示磁盘上的物理目录,具有可以处理此目录的方法。

FileStream ----- 表示可以被写或者被读,或二者都可以的文件,此文件可以异步读和写。

StreamReader ------从流中读取字符数据,并可以通过使用FileStream被创建为基类。

StreamWriter ------向流写字符数据,可以通过使用FileStream被创建为基类。

FileSystemWatcher -----用于监控文件和目录,并在这些位置发生变化时,给出应用程序可以捕获的事件。

   

  1. File和Dictionary类

    作为实用类,File和Dictionary类都提供了许多方法,用于处理文件系统以及其中的文件和目录。这些是静态方法,涉及移动文件、查询和更新属性并创建FileStream对象。

    File类一些常用的静态方法:

    Copy()-----将文件复制到规定的位置

    Create() -----在规定的位置创建文件

    Delete() ----删除文件

    Open() -----在规定的路径上返回FileStream对象

    Move() ----将规定的文件移动到新位置,可以在新位置给文件规定不同的名字

    Directory类的一些常用的静态方法

    CreateDirectory() -----创建具有规定路径的目录

    Delete() -----删除规定的目录以及其中的所有文件

    GetDirectories() -----返回当前目录之前的目录的Directory对象的数组

    GetFiles() -----返回在当前目录中的File对象的数组

    Move() ----- 将规定的目录移动到新位置,可以在新位置为文件夹规定一个新名称

  2. FileInfo 类

    FileInfo类不像File类,他没有静态方法,仅可用于实例化对象。FileInfo对象表示在磁盘或网络位置的文件,注意它不是流,为了读写文件,必须创建Stream对象。

    Fileinfo类提供了下面关于基础性的文件的属性,这些属性可以用来更新文件。

    Attributes---- 获取或设置当前文件的属性

    CreationTime ---- 获取当前文件的创建日期和时间

    DirectoryName ---- 获取文件目录的路径

    Exists ---- 判断是否存在文件

    FullName ---- 检索文件完整路径

    Length ---- 获取文件的容量

    Name ---- 仅仅返回文件的名称,而不是完整的文件位置路径

    挡在.NET代码中规定路径名时,可以使用绝对路径名,也可以使用相对路径名。

    绝对路径名显示的规定文件或目录来自于哪一个已知的位置。

    相对路径相对于应用程序在文件系统上运行的位置。为了上移目录,使用..字符。

  3. FileStream对象

    FileStream对象表示磁盘或者网络路径上指向文件的流。当类提供向文件的读写字节的方法时,经常使用StreamReader或StreamWriter执行这些功能。这是因为FileStream类操作字节或字节数组,而Stream类操作字符数据。字符数据易于使用,但是有些操作,比如随机文件访问,就必须由FileStream对象执行。

    FileStream对象的构造函数

    FileStream aFile = new FileStream("Log.txt",FileMode.OpenOrCreate);

    FileMode枚举具有集中成员:

    Append---- 如果文件存在,就打开文件,将文件的位置移动到文件的末尾,并创建一个新文件。FileMode.Append仅可以与枚举FileAccess.Write联合使用

    Create---- 创建新文件,如果存在这样的文件,就破坏它

    CreateNew---- 创建新文件,如果存在这样的文件,则抛出异常

    Open---- 打开文件,不存在指定文件,则抛出异常

    OpenOrCreate---- 如果文件存在,则打开文件,否则创建新文件,如果文件已存在,保存文件中数据

    Truncate---- 打开现有文件,清除其内容,然后我们可以向文件写入全新的数据,但是保留文件的初始创建日期,文件不存在,抛出异常

    访问级别

    前面构造函数默认以只读模式打开文件,需要一个附加参数规定不同的访问级别,此参数是FileAccess参数

    FileStream aFile = new FileStream("Log.txt",fileMode.OpenOrCreate,FileAccess.Write)

    FileAccess枚举有三种类型:Read,Write,ReadWrite,此属性的作用是:基于用户的身份验证级别改变用户对文件的访问

    读取文件位置用seek:public long Seek(long offset,SeekOrigin origin)

    Long offset是规定文件指针以字节为单位的移动距离;SeekOrigin origin是规定开始计算的起始位置,此枚举包含3个值:Begin,Current和End

    例如:aFile.Seek(8,SeekOrigin.Begin) 文件指针从文件的第一个字节起,移动到文件的第8个字节

    aFile.Seek(2,SeekOrigin.Current)当前位置开始,再移动2个字节

    aFile.Seek(-5,SeekOrigin.End)文件末端位置开始,倒数5个字节

    读取数据

    使用FileStream类读取数据不像StreamReader和StreamWriter类读取数据那么容易,这是因为FileStream类只能处理原始字节(raw byey),这使得FileStream类可以用于任何数据文件,而不仅仅是文本文件,通过读写字节数据就可以读取类型声音和图像的文件。这种灵活性的代价是不能使用它直接读入字符串,而是用StreamReader和StreamWriter类却可以这样处理。但是有几种转换类可以和容易的将字节数组转换为字符数组,或者进行相反的操作

    Read() 方法是从FileStream对象所指向文件访问数据的主要手段:

    Public int Read(byte[] array,int offset,int count)第一个参数是被传输进来的字节数组,用以接受FileStream对象中的数据。第二个参数是字节数组中开始写入数据的位置,它通常是0,表示从数组的开端文件中向数组写数据,最后一个参数规定从文件中读出多少字节

    写入数据

    写入数据的流程是先获取字节数组,再把字节数据转换成字符数组,然后把字符数组用Write()方法写入到文件中,当然在写入的过程中,可以确定在文件的什么位置写入,写多少字符等等。

     

posted @ 2014-09-30 11:25  mmj1989  阅读(157)  评论(0)    收藏  举报