《第7章-目录和文件操作.ppt》由会员分享,可在线阅读,更多相关《第7章-目录和文件操作.ppt(40页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、第第 7 章章 目录和文件操作目录和文件操作 7.1 一个简单的文件读写程序一个简单的文件读写程序7.2 目录管理目录管理7.3 文件管理文件管理7.3 文本文件的读写文本文件的读写7.4 二进制文件的读写二进制文件的读写本本 章章 内内 容容C#程序设计教程蒙祖强编著7.1 一个简单的文件读写程序创创建建窗窗体体应应用用程程序序ReadWriteFile:在在窗窗体体上上添添加加TreeView等等控控件,适当调整各控件的大小和位置,设计界面如下图:件,适当调整各控件的大小和位置,设计界面如下图:C#程序设计教程蒙祖强编著7.1 一个简单的文件读写程序在在设设计计界界面面中中双双击击【列列出
2、出目目录录下下的的文文本本文文件件】和和【保保存存当当前前文文件件】按按钮钮,分分别别编编写写这这两两个个按按钮钮的的Click事事件件处处理理代代码码;最最后后为为控件控件treeView1编写编写AfterSelect事件的处理代码:事件的处理代码:首先在首先在Form1.cs文件的前面引入命名空间:文件的前面引入命名空间:using System.IO;并为并为Form1类添加一个私有成员变量:类添加一个私有成员变量:private string filename=;C#程序设计教程蒙祖强编著7.1 一个简单的文件读写程序 /【列出目录下的文本文件列出目录下的文本文件】按钮按钮 priv
3、ate void button1_Click(object sender,EventArgs e)TreeNode node=new TreeNode(textBox2.Text,0,0);treeView1.Nodes.Clear();treeView1.Nodes.Add(node);TreeNode topnode=treeView1.TopNode;/获取指定目录下的所有文件获取指定目录下的所有文件 string Files=Directory.GetFiles(textBox2.Text,*.txt);for(int i=0;i Files.Length;i+)string s=Fi
4、lesi.Substring(Filesi.LastIndexOf()+1);node=new TreeNode(s,1,2);topnode.Nodes.Add(node);topnode.Expand();C#程序设计教程蒙祖强编著7.1 一个简单的文件读写程序 /控件控件treeView1编写编写AfterSelect事件的处理代码事件的处理代码 private void treeView1_AfterSelect(object sender,TreeViewEventArgs e)filename=textBox2.Text+treeView1.SelectedNode.Text;St
5、reamReader reader=null;try reader=new StreamReader(filename,System.Text.Encoding.Default);string line=reader.ReadLine();textBox1.Text=;while(line!=null)textBox1.Text+=line+rn;line=reader.ReadLine();catch(IOException ex)MessageBox.Show(ex.Message);finally if(reader!=null)reader.Close();C#程序设计教程蒙祖强编著7
6、.1 一个简单的文件读写程序 /【保存当前文件保存当前文件】按钮按钮 private void button2_Click(object sender,EventArgs e)StreamWriter writer=null;try writer=new StreamWriter(filename,false,System.Text.Encoding.Default);writer.WriteLine(textBox1.Text);catch(Exception ex)MessageBox.Show(ex.Message);finally if(writer!=null)writer.Clos
7、e();C#程序设计教程蒙祖强编著7.1 一个简单的文件读写程序运行该程序,先在左上角的文本框中输入已有的目录路径,然后运行该程序,先在左上角的文本框中输入已有的目录路径,然后点击运行界面上的点击运行界面上的【列出目录下的文本文件列出目录下的文本文件】按钮,在按钮,在TreeView控件中将列出给定目录下的所有文本文件,选择相应的文件即在控件中将列出给定目录下的所有文本文件,选择相应的文件即在右边的文本框中打开被选定的文件。当单击右边的文本框中打开被选定的文件。当单击【保存当前文件保存当前文件】按按钮时,将在文本框中打开的文件保存到原文件中。钮时,将在文本框中打开的文件保存到原文件中。C#程序
8、设计教程蒙祖强编著7.1 一个简单的文件读写程序Directory类、类、File类、类、StreamReader类、类、StreamWriter类及有关目录和文件操类及有关目录和文件操作的类都是放在命名空间作的类都是放在命名空间System.IO中中;因此在程序开头要使用下列语句引入该命因此在程序开头要使用下列语句引入该命名空间:名空间:using System.IO;C#程序设计教程蒙祖强编著7.2 目录管理目录管理7.2.1 目录存在的判断目录存在的判断 对于指定的目录,可以由对于指定的目录,可以由Directory.Exists(string path)方法来判方法来判断其是否存在,如
9、果存在则返回断其是否存在,如果存在则返回true,否则范围,否则范围false。例如:例如:string path=C:Inetpub;if(Directory.Exists(path)=true)/相关处理代码相关处理代码Console.WriteLine(Existing);C:Inetpub也写成也写成C:Inetpub,但不能写成,但不能写成C:InetpubC#程序设计教程蒙祖强编著7.2 目录管理目录管理7.2.2 目录的创建和删除目录的创建和删除1.目录的创建目录的创建目录的创建是用目录的创建是用Directory.CreateDirectory(string path)方法来实
10、方法来实现。现。例如:例如:string path=D:VS2008第第7章章Filesdir1;Directory.CreateDirectory(path);不管不管D:VS2008第第7章章Filesdir1目录是否已存在,执行上述目录是否已存在,执行上述语句时不会给出任何提示。语句时不会给出任何提示。如果该目录已经存在,执行上述语句时也不会删除其中包含的如果该目录已经存在,执行上述语句时也不会删除其中包含的文件和子目录。文件和子目录。C#程序设计教程蒙祖强编著7.2 目录管理目录管理7.2.2 目录的创建和删除目录的创建和删除2.目录的删除目录的删除 目录的删除是由目录的删除是由Dir
11、ectory.Delete()方法来实现,该方法有两个重方法来实现,该方法有两个重载版本:载版本:void Directory.Delete(string path)void Directory.Delete(string path,bool recursive)用于删除空目录,如果目用于删除空目录,如果目录非空或指定的目录不存录非空或指定的目录不存在都会产生异常在都会产生异常 参数参数recursive值为值为true时,时,表示删除指定的目录及表示删除指定的目录及该目录下的所有子目录,该目录下的所有子目录,如果指定目录不存在会如果指定目录不存在会产生异常。产生异常。C#程序设计教程蒙祖强编
12、著7.2 目录管理目录管理7.2.2 目录的创建和删除目录的创建和删除例如,下面代码用于删除由例如,下面代码用于删除由path指定的目录,并在删除过程中给指定的目录,并在删除过程中给出相关的提示信息:出相关的提示信息:string path=D:VS2008第第7章章Filesdir1;if(Directory.Exists(path)=true)if(MessageBox.Show(确认要删除该目录及其子目录吗?确认要删除该目录及其子目录吗?,删除目录删除目录,MessageBoxButtons.YesNo,MessageBoxIcon.Warning)=DialogResult.Yes)D
13、irectory.Delete(path,true);C#程序设计教程蒙祖强编著7.2 目录管理目录管理7.2.3 当前工作目录的获取当前工作目录的获取当前应用程序(当前应用程序(.exe文件)的当前工作目录可由文件)的当前工作目录可由Directory.GetCurrentDirectory()方法获取。方法获取。例如:例如:textBox1.Text=Directory.GetCurrentDirectory();执行后在执行后在textBox1控件中显示控件中显示“D:VS2008第第7章章testtestbinDebug”。C#程序设计教程蒙祖强编著7.2 目录管理目录管理7.2.4
14、目录相关信息的获取目录相关信息的获取 1.获取指定目录下的所有子目录和文件获取指定目录下的所有子目录和文件 获取指定目录下的所有子目录可由获取指定目录下的所有子目录可由Directory.GetDirectories()方方法来实现。法来实现。例如:例如:string path=D:VS2008;/获取指定目录下的所有子目录获取指定目录下的所有子目录string Dirs=Directory.GetDirectories(path);for(int i=0;i Dirs.Length;i+)listBox1.Items.Add(Dirsi);C#程序设计教程蒙祖强编著7.2 目录管理目录管理7
15、.2.4 目录相关信息的获取目录相关信息的获取 1.获取指定目录下的所有子目录和文件获取指定目录下的所有子目录和文件获取指定目录下的所有文件可由获取指定目录下的所有文件可由Directory.GetFiles()方法来实现。方法来实现。例如:例如:string path=D:VS2008;/获得获得D:VS2008目录下所有的目录下所有的txt文件文件string Files=Directory.GetFiles(path,*.txt);for(int i=0;i Files.Length;i+)listBox1.Items.Add(Filesi);C#程序设计教程蒙祖强编著7.2 目录管理目
16、录管理7.2.4 目录相关信息的获取目录相关信息的获取 3.获取指定目录所在驱动器的相关信息获取指定目录所在驱动器的相关信息 驱动器信息主要包括驱动器名称、总容量、剩余空间、驱动器驱动器信息主要包括驱动器名称、总容量、剩余空间、驱动器格式等。格式等。获取方法是,先利用给定的目录创建获取方法是,先利用给定的目录创建DriveInfo类类的对象,然后的对象,然后通过对象的属性和方法来获取。通过对象的属性和方法来获取。C#程序设计教程蒙祖强编著7.2 目录管理目录管理7.2.4 目录相关信息的获取目录相关信息的获取例如,下列代码将获取例如,下列代码将获取D:VS2008第第7章章Filesdir1目
17、录所在驱动器目录所在驱动器的若干信息:的若干信息:string path=D:VS2008第第7章章Filesdir1;DriveInfo di=new DriveInfo(path);listBox1.Items.Add(驱动器名称:驱动器名称:+di.Name);listBox1.Items.Add(驱动器根目录:驱动器根目录:+di.RootDirectory);listBox1.Items.Add(剩余空间:剩余空间:+(double)di.TotalFreeSpace/1024/1024/1024+GB);listBox1.Items.Add(驱动器容量:驱动器容量:+(double
18、)di.TotalSize /1024/1024/1024+GB);listBox1.Items.Add(可用空间:可用空间:+(double)di.AvailableFreeSpace/1024/1024/1024+GB);listBox1.Items.Add(驱动器格式:驱动器格式:+di.DriveFormat.ToString();listBox1.Items.Add(驱动器类型:驱动器类型:+di.DriveType);listBox1.Items.Add(驱动器卷标:驱动器卷标:+di.VolumeLabel);C#程序设计教程蒙祖强编著7.3 文件管理文件管理7.3.1 文件的拷
19、贝、移动和删除文件的拷贝、移动和删除1.拷贝文件拷贝文件文件的拷贝可利用文件的拷贝可利用File类提供的静态方法类提供的静态方法Copy()来来实现,它有两实现,它有两个重载版本:个重载版本:public static void Copy(string sourceFileName,string destFileName)public static void Copy(string sourceFileName,string destFileName,bool overwrite)其中,其中,sourceFileName:源文件名:源文件名destFileName:目标文件名:目标文件名Fil
20、e.Copy(sourceFileName,destFileName);当当overwrite的值为的值为true时,表示要覆盖已存在的同名文件,当参时,表示要覆盖已存在的同名文件,当参数数overwrite缺省时(见第一个方法),相当于取值缺省时(见第一个方法),相当于取值false,即不允,即不允许覆盖。许覆盖。C#程序设计教程蒙祖强编著7.3 文件管理文件管理7.3.1 文件的拷贝、移动和删除文件的拷贝、移动和删除 2.移动文件移动文件文件的移动可利用文件的移动可利用File类提供的静态方法类提供的静态方法Move()来实现,该方法来实现,该方法的原型如下:的原型如下:public st
21、atic void Move(string sourceFileName,string destFileName)例如:例如:string sourceFileName=D:VS2008第第7章章Filesdir1MyName.txt;string destFileName=D:VS2008第第7章章Filesdir2MyName.txt;File.Move(sourceFileName,destFileName);C#程序设计教程蒙祖强编著7.3 文件管理文件管理7.3.1 文件的拷贝、移动和删除文件的拷贝、移动和删除3.删除文件删除文件 文件的删除可利用文件的删除可利用File类提供的静态
22、方法类提供的静态方法Delete()来实现。来实现。例如,下面语句的作用是删除例如,下面语句的作用是删除D:VS2008第第7章章Files目录下的目录下的文件文件MyName.txt:string path=D:VS2008第第7章章FilesMyName.txt;File.Delete(path);C#程序设计教程蒙祖强编著7.3 文件管理文件管理7.3.2 文件信息的获取和设置文件信息的获取和设置FileInfo类类通常用于获取或设置文件的有关信息和属性。通常用于获取或设置文件的有关信息和属性。方法是:先利用方法是:先利用FileInfo类的构造函数和文件名创建文件的类的构造函数和文件名
23、创建文件的FileInfo类对象,然后通过对象的方法来实现有关信息和属性的类对象,然后通过对象的方法来实现有关信息和属性的获取和设置。获取和设置。例如,下列代码显示了如何获取文件所在的目录等信息:例如,下列代码显示了如何获取文件所在的目录等信息:string path=D:VS2008第第7章章FilesMyName.txt;FileInfo fi=new FileInfo(path);string info;info=文件所在的目录:文件所在的目录:+fi.DirectoryName;/返回类型是返回类型是stringlistBox1.Items.Add(info);info=文件所在的目录
24、:文件所在的目录:+fi.Directory.ToString();/返回类型是返回类型是DirectorylistBox1.Items.Add(info);info=文件的绝对路径:文件的绝对路径:+fi.FullName;listBox1.Items.Add(info);C#程序设计教程蒙祖强编著7.3 文件管理文件管理7.3.2 文件信息的获取和设置文件信息的获取和设置info=文件名:文件名:+fi.Name;listBox1.Items.Add(info);info=创建时间:创建时间:+fi.CreationTime.ToString();listBox1.Items.Add(in
25、fo);info=文件的扩展名:文件的扩展名:+fi.Extension;listBox1.Items.Add(info);info=文件的最近访问时间:文件的最近访问时间:+fi.LastAccessTime;listBox1.Items.Add(info);info=最近写文件的时间:最近写文件的时间:+fi.LastWriteTime;listBox1.Items.Add(info);info=文件的实际长度(包含的字节数):文件的实际长度(包含的字节数):+fi.Length.ToString();listBox1.Items.Add(info);info=是否只读:是否只读:+fi.
26、IsReadOnly.ToString();listBox1.Items.Add(info);/fi.IsReadOnly=true;/可以设置这个属性,使得文件变为只读可以设置这个属性,使得文件变为只读C#程序设计教程蒙祖强编著7.4 文本文件的读写文本文件的读写7.4.1 读文本文件读文本文件StreamReader类提供构造函数来对指定的文件创建文件的输入类提供构造函数来对指定的文件创建文件的输入流。流。StreamReader类定义了类定义了10个版本的重载构造函数,其中常个版本的重载构造函数,其中常有的有两种:有的有两种:public StreamReader(string path
27、)public StreamReader(path,System.Text.Encoding encoding)其中,参数其中,参数path为文件路径,为文件路径,encoding用于设置编码方式,如果用于设置编码方式,如果文件中包含中文,该参数一般设置为文件中包含中文,该参数一般设置为System.Text.Encoding.Default。C#程序设计教程蒙祖强编著7.4 文本文件的读写文本文件的读写7.4.1 读文本文件读文本文件StreamReader类的常用方法主要包括:类的常用方法主要包括:BaseStream.Seek()方法方法该方法用于指定在输入流中读取字符的位置,其原型如下
28、:该方法用于指定在输入流中读取字符的位置,其原型如下:long BaseStream.Seek(long offset,SeekOrigin origin)其中,其中,uorigin:用于设置在输入流中读取字符的初始位置,其可能取:用于设置在输入流中读取字符的初始位置,其可能取值包括值包括SeekOrigin.Begin、SeekOrigin.Current和和SeekOrigin.End,分别表示初始位置为输入流的开始处、当前位置和流的末尾;,分别表示初始位置为输入流的开始处、当前位置和流的末尾;uoffset:相对于:相对于origin参数的字节偏移量,初始位置参数的字节偏移量,初始位置o
29、ffset就是就是在输入流中读取字符的真正位置。在输入流中读取字符的真正位置。StreamReader reader=new StreamReader(D:testtxt);reader.BaseStream.Seek(10,SeekOrigin.Begin);从文件从文件D:testtxt中中的第的第10字符开始读字符开始读入文本入文本 C#程序设计教程蒙祖强编著7.4 文本文件的读写文本文件的读写7.4.1 读文本文件读文本文件Read()方法方法 该方法用于读取输入流中的下一个字符,同时使输入流的当前位该方法用于读取输入流中的下一个字符,同时使输入流的当前位置加置加1。该函数返回的是字符
30、的。该函数返回的是字符的ASCII码的码的int型整数,因此需要型整数,因此需要作一定的转换。作一定的转换。例如:例如:string path=D:test.txt;StreamReader reader;reader=new StreamReader(path,System.Text.Encoding.Default);int ascii=reader.Read();/获得字符的获得字符的ASCII码码char ch=(char)ascii;/转换为字符转换为字符while(ascii!=-1)if(ascii!=10)richTextBox1.Text+=ch.ToString();asc
31、ii=reader.Read();ch=(char)ascii;reader.Close();C#程序设计教程蒙祖强编著7.4 文本文件的读写文本文件的读写7.4.1 读文本文件读文本文件ReadLine()方法方法 该方法用于从输入流中读取一行字符,并将结果以字符串返回。该方法用于从输入流中读取一行字符,并将结果以字符串返回。例如:例如:string path=D:VS2008第第7章章Files毛主席诗词毛主席诗词2.txt;StreamReader reader=new StreamReader(path,System.Text.Encoding.Default);reader.Base
32、Stream.Seek(10,SeekOrigin.Begin);string line=reader.ReadLine();while(line!=null)richTextBox1.Text+=line+n;line=reader.ReadLine();reader.Close();从文本文件从文本文件“毛主席诗词毛主席诗词2.txt”中的第中的第10字符开始,字符开始,逐行读取文本,并将结果显逐行读取文本,并将结果显示在示在richTextBox1控件中控件中C#程序设计教程蒙祖强编著7.4 文本文件的读写文本文件的读写7.4.2 写文本文件写文本文件StreamWriter类也提供构造
33、方法来对指定的文件创建输出流。类也提供构造方法来对指定的文件创建输出流。StreamWriter类定义了类定义了7个版本的重载构造函数,其中常有的有三个版本的重载构造函数,其中常有的有三种:种:public StreamWriter(string path)public StreamWriter(string path,bool append)public StreamWriter(string path,bool append,System.Text.Encoding encoding)其中,参数其中,参数path和和encoding同同StreamReader类的构造函数,参数类的构造函数
34、,参数append的值如果设置为的值如果设置为true,表示追加写入,为,表示追加写入,为false表示覆盖写表示覆盖写入。入。例如:例如:string path=D:test2.txt;StreamWriter writer=new StreamWriter(path,true,System.Text.Encoding.Default);以追加方式创建基于文件以追加方式创建基于文件D:test2.txt的输出流的输出流C#程序设计教程蒙祖强编著7.4 文本文件的读写文本文件的读写7.4.2 写文本文件写文本文件StreamWriter类提供的常用方法包括类提供的常用方法包括:Write()方
35、法方法 该方法用于向输出流写入字符串、字符、字符数组、实数和整数该方法用于向输出流写入字符串、字符、字符数组、实数和整数等。它一共有等。它一共有17个重载版本,其中常用的包括:个重载版本,其中常用的包括:public override void Write(string value)public override void Write(char value)public override void Write(char buffer)public override void Write(double value)public override void Write(float value)pu
36、blic override void Write(decimal value)public override void Write(int value)public override void Write(long value)例如:例如:string path=D:test3.txt;StreamWriter writer=new StreamWriter(path,false,System.Text.Encoding.Default);writer.Write(aaaaaaa);writer.Write(BBBBB);/这两个语句相当于回车换行的作用这两个语句相当于回车换行的作用write
37、r.Write(r);writer.Write(n);writer.Write(ccccc);writer.Close();Write()方法执行完后,不会自方法执行完后,不会自动添加回车换行符。如果需要,动添加回车换行符。如果需要,必须显式添加。必须显式添加。C#程序设计教程蒙祖强编著7.4 文本文件的读写文本文件的读写7.4.2 写文本文件写文本文件WriteLine()方法方法 该方法与该方法与Write()方法的功能和用法基本相同,也是用于将字符方法的功能和用法基本相同,也是用于将字符串、字符、字符数组、实数和整数等写入输出流中。串、字符、字符数组、实数和整数等写入输出流中。主要不同之
38、处在于,主要不同之处在于,WriteLine()方法执行后会自动添加一个回方法执行后会自动添加一个回车换行符车换行符“rn”,而,而Write()方法没有方法没有。C#程序设计教程蒙祖强编著7.5 二进制文件的读写二进制文件的读写二进制文件的读、写操作分别由二进制文件的读、写操作分别由BinaryReader类和类和BinaryWriter类来实现。类来实现。这两个类一般都要与这两个类一般都要与FileStream类结合使用,即由类结合使用,即由FileStream类创建文件类创建文件流,然后利用流,然后利用BinaryReader类和类和BinaryWriter类实现对文件流的读写操作,类实
39、现对文件流的读写操作,从而实现对文件的读写操作。从而实现对文件的读写操作。FileStream类提供一共类提供一共15个重载构造函数,常用的由两种:个重载构造函数,常用的由两种:public FileStream(string path,FileMode mode)public FileStream(string path,FileMode mode,FileAccess access)其中,其中,upath:用于设置文件路径;:用于设置文件路径;uaccess:用于对文件的访问方式,可能取值包括:用于对文件的访问方式,可能取值包括FileMode.Read、FileMode.Write、Fi
40、leMode.ReadWrite,分别表示只读、只写、可读写;,分别表示只读、只写、可读写;umode:其可能取值及其意义如下:其可能取值及其意义如下:C#程序设计教程蒙祖强编著7.5 二进制文件的读写二进制文件的读写pFileMode.Append:表示以追加方式打开文件(打开后文件位置:表示以追加方式打开文件(打开后文件位置移动到文件的末尾),移动到文件的末尾),FileMode.Append仅可以与仅可以与FileAccess.Write联合使用。联合使用。pFileMode.Create:创建新的文件,如果已存在同名的文件,则:创建新的文件,如果已存在同名的文件,则覆盖它。覆盖它。pF
41、ileMode.CreateNew:创建新的文件,但如果已经存在同名的:创建新的文件,但如果已经存在同名的文件,则抛出异常。文件,则抛出异常。pFileMode.Open:打开已有的文件,但如果不存在所指定的文件,:打开已有的文件,但如果不存在所指定的文件,则抛出异常。则抛出异常。pFileMode.OpenOrCreate:如果文件已存在,则打开它,否则创:如果文件已存在,则打开它,否则创建新的文件。建新的文件。pFileMode.Truncate:打开已有的文件,当写入数据时将覆盖文:打开已有的文件,当写入数据时将覆盖文件中原有的数据,但文件的基本属性保持不变(如初始创建日期件中原有的数据
42、,但文件的基本属性保持不变(如初始创建日期等)。如果指定的文件不存在则抛出异常。等)。如果指定的文件不存在则抛出异常。C#程序设计教程蒙祖强编著7.5 二进制文件的读写二进制文件的读写BinaryWriter类提供了两个本版的构造函数:类提供了两个本版的构造函数:public BinaryWriter(Stream output,)public BinaryWriter(Stream output,Encoding encoding)其中,参数其中,参数output用于设置流对象,通常是由用于设置流对象,通常是由FileStream类实例化类实例化的对象。的对象。7.5.1 写二进制文件写二进
43、制文件C#程序设计教程蒙祖强编著7.5 二进制文件的读写二进制文件的读写BinaryWriter类常用的方法主要是:类常用的方法主要是:Write()方法方法 该方法一共重载了该方法一共重载了18个版本,其中大部分与个版本,其中大部分与StreamWriter类的类的Write()方法相同。方法相同。7.5.1 写二进制文件写二进制文件C#程序设计教程蒙祖强编著7.5 二进制文件的读写二进制文件的读写例如:例如:string path=C:test.dat;FileStream fs=new FileStream(path,FileMode.OpenOrCreate,FileAccess.Wr
44、ite);BinaryWriter writer=new BinaryWriter(fs);writer.BaseStream.Seek(0,SeekOrigin.Begin);/设置当前位置设置当前位置writer.Write(中华人民共和国中华人民共和国);/写入数据写入数据writer.Close();fs.Close();7.5.1 写二进制文件写二进制文件写二进制文件的写二进制文件的关键代码关键代码 C#程序设计教程蒙祖强编著7.5 二进制文件的读写二进制文件的读写类类BinaryReader提供许多用于读取输入流中的数据,主要包括:提供许多用于读取输入流中的数据,主要包括:publ
45、ic abstract int Read(byte buffer,int index,int count)public abstract byte ReadByte()public abstract byte ReadBytes()public abstract char ReadChar()public abstract char ReadChars()public abstract decimal ReadDecimal()public abstract double ReadDouble()public abstract short ReadInt16()public abstract
46、int ReadInt32()public abstract long ReadInt64()public abstract float ReadSingle()public abstract string ReadString()7.5.2 读二进制文件读二进制文件C#程序设计教程蒙祖强编著7.5 二进制文件的读写二进制文件的读写string path=C:test.dat;FileStream fs=new FileStream(path,FileMode.Open);BinaryReader reader=new BinaryReader(fs);reader.BaseStream.Se
47、ek(0,SeekOrigin.Begin);/设置当前位置设置当前位置/可通过判断可通过判断fs.Position是否等于是否等于fs.Length来断定是否已经读完来断定是否已经读完string s=reader.ReadString();reader.Close();fs.Close();7.5.2 读二进制文件读二进制文件读二进制文件的读二进制文件的关键代码关键代码 C#程序设计教程蒙祖强编著7.5 二进制文件的读写二进制文件的读写需需要要注注意意的的是是,读读文文件件语语句句的的写写法法和和顺顺序序完完全全由由写写文文件件的的格格式式来来决定,相应的语句要一一对应,不能有差错,否则将
48、读出乱码。决定,相应的语句要一一对应,不能有差错,否则将读出乱码。7.5.2 读二进制文件读二进制文件例例如如,下下列列的的写写文文件件语语句句和和读读文文件件语语句句必必须须一一一一对对应应,否否则则将将导导致错误读出数据:致错误读出数据:C#程序设计教程蒙祖强编著4 string path=C:test.dat;4 FileStream fs=new FileStream(path,FileMode.OpenOrCreate,FileAccess.Write);4 BinaryWriter writer=new BinaryWriter(fs);4 writer.BaseStream.Se
49、ek(0,SeekOrigin.Begin);/设置当前位置4 /写入数据4 writer.Write(网管);4 writer.Write(long)123);4 writer.Write(L);4 writer.Write(double)897.0);4 writer.Close();4 fs.Close();C#程序设计教程蒙祖强编著fs=new FileStream(path,FileMode.Open);BinaryReader reader=new BinaryReader(fs);reader.BaseStream.Seek(0,SeekOrigin.Begin);/设置当前位置 string str=reader.ReadString();richTextBox1.Text+=str;str=reader.ReadUInt64().ToString();str=reader.ReadString();/error richTextBox1.Text+=str;reader.Close();fs.Close();
限制150内