1、11.1 文件的使用文件的使用11.2 使用文件流读写文件使用文件流读写文件11.3 小结小结11.1 文件的使用11.1.1 File类File类的功能是操作文件。C#中,命名空间中,命名空间System.IO中提供的中提供的File类是一类是一个密封类,它的所有方法都是静态的,不需创建个密封类,它的所有方法都是静态的,不需创建实例即可直接调用。实例即可直接调用。File类支持对文件的基本操类支持对文件的基本操作,包括创建、复制、移动、删除和打开一个文作,包括创建、复制、移动、删除和打开一个文件。件。常用方法:常用方法:AppendText、Create、Open、Delete、Create
2、Text、Copy、GetCreationTime、GetLastaccessTime、Move、OpenRead、OpenText、OpenWrite、Exists、Replace、GetAttributes、SetAttributes 11.1.1 File类 Create方法,用于创建或覆盖文件,其语方法,用于创建或覆盖文件,其语法形式如下:法形式如下:public static FileStream Create(string path);Open方法:用于打开文件,其语法形式如方法:用于打开文件,其语法形式如下:下:public static FileStream Open(stri
3、ng path,FileMode mode);public static FileStream Open(string path,FileMode mode,FileAccess access);11.1.1 File类 Delete方法:用于删除文件,如果指定的方法:用于删除文件,如果指定的文件不存在,则引发异常,其语法形式如文件不存在,则引发异常,其语法形式如下:下:public static void Delete(string path);Copy方法:用于行文件复制,其语法形方法:用于行文件复制,其语法形式如下:式如下:public static void Copy(string s
4、ourceFileName,string destFileName);public static void Copy(string sourceFileName,string destFileName,bool overwrite);11.1.1 File类示例:示例:static void Main(string args)string path=d:temptext.txt;string path2=d:temptext1.txt;try File.Delete(path2);File.Copy(path,path2);Console.WriteLine(0复制到复制到1,path,pat
5、h2);catch(Exception e)Console.WriteLine(e.ToString();Console.Read();FileInfo类类FileInfo类与类与File类均能完成对文件的操作,类均能完成对文件的操作,不同点在于不同点在于FileInfo类必须被实例化,并且类必须被实例化,并且每个每个FileInfo类的实例必须对应于系统中一类的实例必须对应于系统中一个实际存在的文件。个实际存在的文件。FileInfo类构造函数的语法形式如下:类构造函数的语法形式如下:public FileInfo(string path);示例:示例:FileInfo fi=New Fil
6、eInfo(c:/temp);11.1.2 Directory类 Directory类对目录进行操作类对目录进行操作。在。在Visual C#中,中,命名空间命名空间System.IO中提供的中提供的Directory类是一个类是一个密封类,它的所有方法都是静态的,不需创建实密封类,它的所有方法都是静态的,不需创建实例即可直接调用。例即可直接调用。常用方法常用方法:CreateDirectory、Delete、Move、GetFiles、GetCreationTime、GetCurrentDirectory、GetDirectories、GetFileSystemEntries、GetLast
7、AccessTime、GetLastWriteTime、GetParent、Exists、SetCurrentDirectory、SetLastAccessTime、SetLastWriteTime、GetLogicalDrives。11.1.2 Directory类 CreateDirectory方法:用于创建目录,方法:用于创建目录,如果指定的目录不存在,系统会按如果指定的目录不存在,系统会按path指指定的路径创建所有目录和子目录,其语法定的路径创建所有目录和子目录,其语法形式如下:形式如下:public static DirectoryInfo CreateDirectory(stri
8、ng path);示例:示例:Directory.CreateDirectory(c:test);Directory.CreateDirectory(c:testt1t2);11.1.2 Directory类 Move方法:用于将文件或目录及其内容方法:用于将文件或目录及其内容移动到新目录,其语法形式如下:移动到新目录,其语法形式如下:Public static void Move(string sourceDirName,string destDirName);GetFiles方法方法:用于返回指定目录下文件的:用于返回指定目录下文件的名称,并以字符串数组的形式返回,其语名称,并以字符串数组
9、的形式返回,其语法形式如下:法形式如下:public static string GetFiles(string path);public static string GetFiles(string path,string searchPatttern);11.1.2 Directory类 示例:创建并删除指定目录示例:创建并删除指定目录 static void Main(string args)string path=d:MyDir;if(Directory.Exists(path)Console.WriteLine(目录已存在目录已存在);return;Directory.CreateDi
10、rectory(path);Console.WriteLine(成功创建目录:成功创建目录:0,Directory.GetCreationTime(path);Console.Read();DirectoryInfo类类Directory类和类和DirectoryInfo类,这两个类类,这两个类均可用于对磁盘和目录进行管理操作均可用于对磁盘和目录进行管理操作。DirectoryInfo类与类与Directory类的不同点在类的不同点在于于DirectoryInfo类必须被实例化后才能使类必须被实例化后才能使用,而用,而Directory类则只能提供静态的方法。类则只能提供静态的方法。Diect
11、oryInfo类构造函数的语法形式如下:类构造函数的语法形式如下:public DirectoryInfo(string path);其中,参数其中,参数path表示目录路径。表示目录路径。11.2 使用文件流读写文件11.2.1 流概述流提供了一种向后备存储写入字节以及从流提供了一种向后备存储写入字节以及从后备存储读取字节的方式。后备存储为文后备存储读取字节的方式。后备存储为文件、网络和内存。对应不同后备存储有不件、网络和内存。对应不同后备存储有不同的流,包括文件流、内存流和网络流。同的流,包括文件流、内存流和网络流。11.2.1 流概述 常见常见System.IO命名空间中的常用类命名空间
12、中的常用类 11.2.1 流概述StreamReader类、类、StreamWriter类、类、BinaryReader类和类和BinaryWriter类虽然非继承类虽然非继承自自Stream类,它们也负责读取文件,称为流读类,它们也负责读取文件,称为流读取器和流写入器,它们与取器和流写入器,它们与Stream类的区别如下。类的区别如下。从从System.IO.Stream继承的类可以进行字节输入和输出。继承的类可以进行字节输入和输出。BinaryReader类和类和BinaryWriter类以二进制形式进行基本类以二进制形式进行基本类型数据流的读取和写入,类型数据流的读取和写入,Stream
13、Reader类和类和StreamWriter类是实现读取和写入字符方法的抽象类。类是实现读取和写入字符方法的抽象类。实际上,通常不需要直接和实际上,通常不需要直接和FileStream类型的成员类型的成员交互,而是使用各种交互,而是使用各种Stream包装类,例如包装类,例如StreamReader类、类、StreamWriter类、类、BinaryReader类和类和BinaryWriter类,它们能更方便类,它们能更方便地处理文本数据和地处理文本数据和.NET基本数据类型。基本数据类型。11.2.2 FileStream类 常用属性:常用属性:CanRead、CanSeek、CanWrit
14、e、Length、Position 常用方法:常用方法:Read、ReadByte、Write、WriteByte、Seek、Flush、Close 构造函数:构造函数:public FileStream(string path,FileMode mode);public FileStream(string path,FileMode mode,FileAccess access);11.2.2 FileStream类 Read方法:用于由文件流中读取数据并方法:用于由文件流中读取数据并保存到字节数组保存到字节数组array中,其语法形式:中,其语法形式:public override int
15、 Read(bytearray,int offest,int count);ReadByte方法:用于由文件流中读取一方法:用于由文件流中读取一个字节的数据,并将读取位置提升一个字个字节的数据,并将读取位置提升一个字节,其返回值为读取的字节转换为节,其返回值为读取的字节转换为int类类型的值,如果从流的末尾读取,则返回值型的值,如果从流的末尾读取,则返回值为为-1。其语法形式如下:。其语法形式如下:public override int ReadByte();11.2.2 FileStream类 Write方法:把字节数组方法:把字节数组array中的数据写中的数据写入到文件流中,其语法形式如
16、下:入到文件流中,其语法形式如下:public override void Write(bytearry,int offest,int count);WriteByte方法:用于向文件流中写入一方法:用于向文件流中写入一个字节,其语法形式如下:个字节,其语法形式如下:public override void WriteByte(byte value);Seek方法:用于将文件流的当前位置设方法:用于将文件流的当前位置设置为给定值,其语法形式如下:置为给定值,其语法形式如下:public override long Seek(long offest,SeekOrigin origin);11.2
17、.2 FileStream类Flush方法:用于将保存在缓冲区中的所有方法:用于将保存在缓冲区中的所有数据真正写入到文件中,其语法形式如下:数据真正写入到文件中,其语法形式如下:public override void Flush();Close方法:关闭文件流并释放与当前文件方法:关闭文件流并释放与当前文件流关联的全部资源,其语法形式如下:流关联的全部资源,其语法形式如下:public override void Close();11.2.3 StreamWriter类和StreamReader类 与与FileStream类中的类中的Read方法和方法和Write方方法相比,这两个类的应用更
18、为广泛且简单,法相比,这两个类的应用更为广泛且简单,因为因为StreamWriter类和类和StreamReader类类按字符操作文件流,而按字符操作文件流,而FileStream类使用类使用字节操作文件流。字节操作文件流。StreamWriter类常用属性:类常用属性:AutoFlush、BaseStream StreamWriter类常用方法:类常用方法:Write、WriteLine、Close、Flush 11.2.3 StreamWriter类和StreamReader类 示例:示例:FileStream MyFile=new FileStream(D:example.txt,Fil
19、eMode.OpenOrCreate,FileAccess.Write);StreamWriter MyStreamWriter=new StreamWriter(Stream)MyFile,System.Text.Encoding.Unicode);MyStreamWriter.Write(“你好你好”);MyStreamWriter.Flush();MyStreamWriter.Close();11.2.3 StreamWriter类和StreamReader类StreamReader类常用方法:类常用方法:Read、ReadLine、Peek 示例:示例:string MyText=;S
20、treamReader MySf=new StreamReader(D:example.txt,System.Text.Encoding.Unicode);MySf.BaseStream.Seek(0,SeekOrigin.Begin);while(MySf.Peek()!=-1)MyText=MySf.ReadLine();MyText=MyText+r+n;MySf.Close();11.2.4 BinaryWrite类和BinaryReader类 BinaryWriter类的作用是以二进制形式将类的作用是以二进制形式将基本数据类型的数据写入到流中。基本数据类型的数据写入到流中。Binar
21、yReader类的作用是用特定的编码类的作用是用特定的编码从流中读取二进制数据并存放到基本数据从流中读取二进制数据并存放到基本数据类型的变量或数组中。类型的变量或数组中。BinaryWriter类的主要方法:类的主要方法:Seek、Write。BinaryReader类的主要方法:类的主要方法:ReadBytes、Readchars 11.2.4 BinaryWrite类和BinaryReader类 BinaryWriter类的主要方法:类的主要方法:Seek方法:用与设置流的当前位置。方法:用与设置流的当前位置。public virtual long Seek(int offest,Seek
22、Origin origin);Write方法:用于把值写入流中,其语法方法:用于把值写入流中,其语法形式:形式:public virtual void Write(数据类型数据类型value);public virtual void Write(bytebuffer);public virtual void Write(char chars);11.2.4 BinaryWrite类和BinaryReader类 BinaryReader类的主要方法类的主要方法 ReadBytes方法:用于读取字节数组,从方法:用于读取字节数组,从当前流中将当前流中将count个字节读入字节数组,个字节读入字节数
23、组,并使当前位置提升并使当前位置提升count个字节,其语法个字节,其语法形式:形式:public virtual byte ReadByte(int count);Readchars方法:用于读取字符数组,从方法:用于读取字符数组,从当前流中读取当前流中读取count个字符,以字符数组个字符,以字符数组的形式返回数据并提升当前位置,其语法的形式返回数据并提升当前位置,其语法形式如下:形式如下:public virtual char ReadChars(int count);11.3 小结 通过本章的学习可了解到,每个文件都是通过本章的学习可了解到,每个文件都是字节流,在字节流,在C#语言中通过采用语言中通过采用System.IO命名空间中提供的多种类型进行数据文件命名空间中提供的多种类型进行数据文件和数据流的读写操作。其中,常用类型包和数据流的读写操作。其中,常用类型包括括File、Directory、FileInfo、D i r e c t o r y I n f o、F i l e S t r e a m、BinaryReader、BinaryWriter、StreamReader、StreamWriter等。等。