第11章C的文件操作_第1页
第11章C的文件操作_第2页
第11章C的文件操作_第3页
第11章C的文件操作_第4页
第11章C的文件操作_第5页
已阅读5页,还剩36页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、第11章 C#的文件操作2010-12-24 11.1 C#的文件处理系统一个完整的应用程序肯定要涉及到对系统和用户的信息进行存储、读取、修改等操作,因此有效地实现文件操作是一个完善的应用程序所必须具备的内容。C#提供了文件操作的强大功能,通过C#程序的编写,可以实现文件的存储管理、对文件的读写等各种操作。2022-6-222C#程序设计实用教程11.1.1 认识认识C#的文件处理系统的文件处理系统在C#中进行文件操作时,也不需要关心文件的具体存储格式。只要利用.NET Framework所封装的对文件操作的统一外部接口,就可以保证程序在不同的文件系统上能够良好地移植。.NET Framewo

2、rk在System.IO命名空间中提供了许多类可以用来操作文件夹与文件,允许对数据流与文件读取和写入,其重要的类如表11-1所示。2022-6-223C#程序设计实用教程11.1.1 认识认识C#的文件处理系统的文件处理系统2022-6-224C#程序设计实用教程目录管理:Directory 提供的是静态方法DirectoryInfo 提供的非静态方法。文件管理:File 提供的是静态方法FileInfo 非静态方法。读写文件:FileStream 按字节读写文件StreamReader 按文本模式读文件StreamWriter 按文本模式写文件11.1.2文件和流文件和流文件(File)和流

3、(Stream)是既有区别又有联系的两个概念。文件是指在各种存储介质上永久存储的数据的有序集合,它是进行数据读写操作的基本对象。通常情况下文件按照树状目录进行组织,每个文件都有文件名、文件所在路径、创建时间、访问权限等属性。流是字节序列的抽象概念,例如文件、输入/输出设备、内部进程通信管道或者TCP/IP套接字。流提供一种向后备存储器写入字节和后备存储器读取字节的方式。除了和磁盘文件直接相关的文件流以外,流还有多种类型。所有表示流的类都是从抽象基类Stream继承的。2022-6-226C#程序设计实用教程 11.2 文件处理基于C#的程序,可以很方便实现文件的存储管理以及对文件的读写等各种操

4、作。本节将从目录管理和文件操作两方面来介绍相关内容。11.2.1 目录管理.NET Framework在命名空间System.IO中提供了Directory类来进行目录管理。利用Directory来可以完成进行创建、移动、浏览目录(或子目录)等操作,甚至还可以定义隐藏目录和只读目录。Directory类是一个密封类,它的所有方法都是静态的,因而不必创建类的实例就可以直接调用。2022-6-227C#程序设计实用教程对 “目录”的操作,我们最关注的是: 如何创建一个目录:CreateDirectory 如果删除一个目录:Delete 如何获取目录下的文件:GetFiles 如何获取目录下的目录:

5、GetDirectores11.2.1 目录管理目录管理Directory类的常用方法介绍如下:(1)CreateDirectory方法CreateDirectory方法用于创建目录。其方法原型为:public static DirectoryInfo CreateDirectory(string path);其中的参数path表示目录所在的路径,返回值是path指定的所有DirectoryInfo对象,包括子目录。(2)Delete方法Delete方法用于删除目录及其内容。其方法原型为:public static void Delete(string);()GetCurrentDirecto

6、ry方法GetCurrentDirectory方法用于获取目录及其内容。其方法原型为:public static string GetCurrentDirectory();2022-6-229C#程序设计实用教程11.2.1 目录管理目录管理【例例11-111-1】目录的创建和删除。步骤如下:(1)创建一个项目,默认窗体为Form1。(2)在Form1窗体中,主要添加两个Button控件,分别用于创建目录和删除目录;添加一个TextBox控件,用于输入创建目录的路径。(3)主要程序代码。private void btnCreateDirectory_Click(object sender, E

7、ventArgs e) if (DialogResult.Yes = MessageBox.Show(是否要创建目录+txtPath.Text.ToString(), 提示, MessageBoxButtons.YesNo) Directory.CreateDirectory(txtPath.Text);/创建目录 2022-6-2210C#程序设计实用教程11.2.1 目录管理目录管理private void btnDeleteDirectory_Click(object sender, EventArgs e)private void btnDeleteDirectory_Click(ob

8、ject sender, EventArgs e) if (DialogResult.Yes = MessageBox.Show( if (DialogResult.Yes = MessageBox.Show(是否删除目录是否删除目录 + + txtPath.Text.ToString(),txtPath.Text.ToString(), 提示提示, MessageBoxButtons.YesNo), MessageBoxButtons.YesNo) try try Directory.Delete(txtPath.Text);/ Directory.Delete(txtPath.Text);

9、/删除目录删除目录 / /如果产生异常,则输出异常提示信息如果产生异常,则输出异常提示信息 catch (IOException e1) catch (IOException e1) MessageBox.Show( MessageBox.Show(删除目录失败删除目录失败!n + e1.ToString(), !n + e1.ToString(), 提示提示);); return; return; 2022-6-2211C#程序设计实用教程11.2.1 目录管理目录管理注意:注意:因为使用了Directory类,所以要添加对System.IO命名空间的引用。程序运行如图11-1所示。2022

10、-6-2212C#程序设计实用教程11.2.2 文件管理文件管理在System.IO命名空间中提供了多种类,用于进行文件和数据流的读写操作。其中File类通常和FileStream类协作来完成文件的 (File类通常提供静态方法)创建、 Create删除、 Delete拷贝、 Copy移动、 Move打开 Open 等操作。2022-6-2213C#程序设计实用教程1. File1. File类类File类提供的方法主要有Create、Copy、Move、Delete等,可以利用这些方法实现基本的文件管理操作。(1)创建文件Create方法用于创建一个文件,该方法执行成功后将返回代表新建文件的

11、FileStream类对象。Create方法的原型定义如下:public static FileStream Create(string path);其中Path参数表示文件的全路径名称。11.2.2 文件管理文件管理(2)打开文件在C#中,打开文件的方法有多种,常用的有Open、OpenRead、OpenText、OpenWrite等几种。Open方法可以打开一个文件,该方法的原型定义如下:public static FileStream Open(string, FileMode);public static FileStream Open(string, FileMode, FileAc

12、cess);public static FileStream Open(string, FileMode, FileAccess, FileShare);其中FileMode参数用于指定对文件的操作模式,它可以是下列值之一:Append:向文件中追加数据。Create:新建文件,如果同名文件已经存在,新建文件将覆盖该文件。CreateNew:新建文件,如果同名文件已经存在,则引发异常。Open:打开文件。OpenOrCreate:如果文件已经存在,则打开该文件,否则新建一个文件。Truncate:截断文件。2022-6-2215C#程序设计实用教程11.2.2 文件管理文件管理FileAcce

13、ss参数用于指定程序对文件流所能进行的操作,它可以是以下值之一:Read:读访问,从文件中读取数据。ReadWrite:读访问和写访问,从文件读取数据和将数据写入文件。Write:写访问,可将数据写入文件。考虑到有可能多个应用程序需要同时读取一个文件,因此在Open方法中设置了文件共享标志FileShare,该参数的值可以是:Inheritable:使文件句柄可由子进程继承。None:不共享当前文件。Read:只读共享,允许随后打开文件读取。Write:只写共享,允许随后打开文件写入。2022-6-2216C#程序设计实用教程11.2.2 文件管理文件管理除了可以用Open文件打开文件外,还可

14、以用OpenRead方法打开文件。不过通过OpenRead打开的文件只能进行文件读的操作,不能进行写入文件的操作。该方法的原型定义如下:public static FileStream OpenRead(string path);其中path参数表示要打开的文件的全路径名称。此外,还可以用OpenText方法打开文件。不过通过OpenText方法打开的文件只能进行读取操作,不能进行文件写入操作,而且打开的文件类型只能是纯文本文件。该方法的原型定义如下:public static FileStream OpenText(string path);和OpenText方法有所不同,OpenWrite

15、方法打开的文件既可以进行读取操作,也可以进行写入操作,该方法的原型定义如下:public static FileStream OpenWrite(string path);2022-6-2217C#程序设计实用教程11.2.2 文件管理文件管理(3)复制文件通过Copy方法实现以文件为单位的数据复制操作。Copy方法能将源文件中的所有内容复制到目的文件中,该方法的原型定义如下:public static void Copy(string sourceFileName, string destFileName);public static void Copy(string sourceFileN

16、ame, string destFileName, bool overwrite);其中sourceFileName参数表示源文件的全路径名,destFileName参数表示目的文件的全路径名,overwrite参数表示是否覆盖目的文件。2022-6-2218C#程序设计实用教程11.2.2 文件管理文件管理(4)删除文件通过Delete方法从磁盘上删除一个文件,该方法的原型定义如下:public static void Delete(string path);其中path参数表示要删除的文件的全路径名。(5)移动文件可以通过Move方法用于将指定文件移到新位置,并提供指定新文件名的选项。该方

17、法的原型定义如下:public static void Move(string sourceFileName, string destFileName);其中sourceFileName参数表示源文件的全路径名,destFileName参数表示文件的新路径名。2022-6-2219C#程序设计实用教程11.2.2 文件管理文件管理2. FileStream2. FileStream类类FileStream类实现用文件流的方式来操纵文件,下面将就FileStream类的重要方法和主要属性做一个简要介绍。对此类关注的地方:首要:FileStream类有什么作用构造函数有哪些?属性有哪些?有哪些方法

18、?2022-6-2220C#程序设计实用教程(1)构造函数通过FileStream类的构造函数可以新建一个文件。FileStream类的构造函数有很多,其中比较常用的构造函数的原型定义如下。通过指定路径和创建模式初始化FileStream类的新实例:public FileStream(string path, FileMode mode);通过指定路径、创建模式和读/写权限初始化FileStream类的新实例:public FileStream(string path, FileMode mode, FileAccess access);11.2.2 文件管理文件管理通过指定路径、创建模式、读

19、/写权限和共享权限初始化FileStream类的新实例:public FileStream(string path, FileMode mode, FileAccess access, FileShare share);其中mode参数和access参数的取值和File类的Open方法的相应参数的取值是相同的。如果需要通过文件流的构造函数新建一个文件,则可以设定mode参数为Create,同时设定access参数为Write。例如:FileStream fs = new FileStream(test.txt, FileMode.Create, FileAccess.Write);如果需要打开

20、一个已存在的文件,则指定FileStream方法的mode参数为Open即可。2022-6-2222C#程序设计实用教程11.2.2 文件管理文件管理(2)属性FileStream类的主要属性如下:CanRead:决定当前文件流是否支持文件读取操作。CanSeek:决定当前文件流是否支持文件查找操作。CanWrite:决定当前文件流是否支持文件写入操作。Length:获取用字节表示文件流的长度。Position:获取或设置文件流的当前位置。2022-6-2223C#程序设计实用教程11.2.2 文件管理文件管理(3)主要方法Close方法Close方法用于关闭文件流,该方法的原型定义如下:pu

21、blic override void Close();Read方法Read方法可以实现文件流的读取,该方法的原型定义如下:public override int Read(byte array, int offset, int count);其中array参数是保存读取数据的字节数组,offset参数表示开始读取的文件偏移值,count参数表示读取的数据量。ReadByte方法ReadByte方法可以用于从文件流中读取一个字节的数据,该方法的原型定义如下:public override int ReadByte();2022-6-2224C#程序设计实用教程11.2.2 文件管理文件管理Wri

22、te方法Write方法和Read方法相对应,该方法负责将数据写入到文件中,该方法的原型定义如下:public override int Write(byte array, int offset, int count);其中array参数是保存写入数据的字节数组,offset参数表示开始写入的文件偏移值,count参数表示写入的数据量。Flush方法向文件中写入数据后,一般还需要调用Flush方法来刷新该文件,Flush方法负责将保存在缓冲区中的所有数据真正写入到文件中。该方法的原型定义如下:public override int Flush();2022-6-2225C#程序设计实用教程11.

23、2.2 文件管理文件管理【例例11-211-2】用FileStream类编写一个保存和显示文件的程序。程序的运行界面如图11-2所示。程序运行时在文本框中输入文本,单击“保存”按钮将把输入的文本保存到“D:Example1.txt”文件中;单击“清空”按钮将把文本框中输入的文本清除;单击“打开”按钮将把“D:Example1.txt”文件打开,并把文件中的内容显示在文本框中;单击“退出”按钮将退出应用程序。设计的思路是利用FileStream类的实例来进行文件的读写操作。由于只支持字节方读写,因此在保存文件时需把字符转换成字节再写到文件中;读取文件时,需把读取的数据转换成字符才能在文本框中显示

24、。读取文件需要考虑文件的结尾,即读取出来的数据为-1(仅对于文本文件)。2022-6-2226C#程序设计实用教程11.2.2 文件管理文件管理设计步骤如下:(1)创建新项目,在窗体上添加4个按钮控件和1个文本框控件(其MultiLine属性设为True)。参见图11-2设置控件对象的属性并适当调整控件在窗体的位置和大小。(2)编写代码。导入命名空间:using System.IO;/导入命名空间2022-6-2227C#程序设计实用教程11.2.2 文件管理文件管理实现按钮的单击事件代码如下:private void btnSave_Click(object sender, EventArg

25、s e)private void btnSave_Click(object sender, EventArgs e) / /以打开和创建,只能写的方式创建文件以打开和创建,只能写的方式创建文件MyFsMyFs FileStream MyFs = new FileStream(D:Example1.txt, FileStream MyFs = new FileStream(D:Example1.txt, FileMode.OpenOrCreate, FileAccess.Write); FileMode.OpenOrCreate, FileAccess.Write); byte b; byte

26、b; char ch; char ch; int i; int i; for (i = 0; i this.txtInput.Text.Length; i+)/ for (i = 0; i this.txtInput.Text.Length; i+)/遍历所有的字遍历所有的字符符 ch = this.txtInput.Texti;/ ch = this.txtInput.Texti;/读取一个字符读取一个字符 b=(byte)ch;/ b=(byte)ch;/把该字符转换成字节符把该字符转换成字节符 MyFs.WriteByte(b);/ MyFs.WriteByte(b);/把该字节写到文件

27、中去把该字节写到文件中去 MyFs.Flush();/ MyFs.Flush();/刷新文件刷新文件 MyFs.Close();/ MyFs.Close();/关闭文件关闭文件 2022-6-2228C#程序设计实用教程11.2.2 文件管理文件管理 private void btnClear_Click(object sender, EventArgs e) this.txtInput.Clear(); 2022-6-2229C#程序设计实用教程11.2.2 文件管理文件管理private void btnOpen_Click(object sender, EventArgs e)priva

28、te void btnOpen_Click(object sender, EventArgs e) string MyText = ;/MyText string MyText = ;/MyText存放要显示的文件内容,称之为结果存放要显示的文件内容,称之为结果字符串字符串 string ch; string ch; int a = 0; int a = 0; / /以打开,只读的方式创建文件流以打开,只读的方式创建文件流MyFsMyFs FileStream MyFs = new FileStream(D:Example1.txt, FileStream MyFs = new FileStr

29、eam(D:Example1.txt, FileMode.Open, FileAccess.Read); FileMode.Open, FileAccess.Read); a = MyFs.ReadByte();/ a = MyFs.ReadByte();/从文件中读取一个字节从文件中读取一个字节 while (a != -1) / while (a != -1) /如果不是文件的结尾如果不是文件的结尾 ch = (char)a).ToString();/ ch = (char)a).ToString();/把读取的字节转换为字符串型把读取的字节转换为字符串型 MyText = MyText

30、+ ch;/ MyText = MyText + ch;/把该字符串连接到结果字符串的末尾把该字符串连接到结果字符串的末尾 a = MyFs.ReadByte();/ a = MyFs.ReadByte();/再读一个字节再读一个字节 this.txtInput.Text = MyText;/ this.txtInput.Text = MyText;/把结果字符串在文本框中显示出来把结果字符串在文本框中显示出来 MyFs.Close();/ MyFs.Close();/关闭文件关闭文件 2022-6-2230C#程序设计实用教程11.2.2 文件管理文件管理 private void btnE

31、xit_Click(object sender, EventArgs e) Application.Exit(); 2022-6-2231C#程序设计实用教程 11.3 文件的读和写在C#中,除了前面提到的使用FileStream类实现文件读写之外,还提供了两个专门负责文件读取和写入操作的类,即StremReader类及StreamWriter类。StreamReader类及StreamWriter类为用户提供了按文本模式读写数据的方法。与FileStream类中的Read和Write方法相比,这两个类的应用更为广泛。其中,StreamReader类负责从文件中读数据;StreamWriter

32、类主要负责向文件中写入数据。下面,将简要介绍它们的常用构造函数及方法。2022-6-2232C#程序设计实用教程11.3.1 StreamReader类类StreamReader类的常用构造函数和方法如下所述。为指定的流初始化StreamReader类的新实例的构造函数原型为:public StreamReader(Stream stream);为指定的文件名初始化StreamReader类的新实例的构造函数原型为:public StreamReader(string path);StreamReader类的常用方法包括Read方法和ReadLine方法。Read方法Read方法用于读取输入流

33、中的下一个字符,并使当前流的位置提升一个字符,该方法的原型为:public override int Read();2022-6-2233C#程序设计实用教程11.3.1 StreamReader类类ReadLine方法ReadLine方法用于从当前流中读取一行并将数据作为字符串返回,该方法的原型为:public override string ReadLine();ReadToEnd方法ReadToEnd方法用于从当前流的当前位置到末尾读取数,该方法的原型为:public override string ReadToEnd();2022-6-2234C#程序设计实用教程11.3.2 写文件写

34、文件StreamWriter类的常用构造函数如下所述。为指定的流初始化StreamWriter类的新实例的构造函数原型为:public StreamWriter(Stream stream);为指定的文件名初始化StreamWriter类的新实例的构造函数原型为:public StreamWriter(string path);StreamWriter类的常用方法包括Write方法和WriteLine方法。Write方法Write方法用于将字符、字符数组、字符串等写入文本流,该方法的原型为:public override void Write(char);public override voi

35、d Write(char);public override void Write(string);2022-6-2235C#程序设计实用教程11.3.2 写文件写文件WriteLine方法WriteLine方法用于将后面跟行结束符的字符、字符数组、字符串等写入文本流,该方法的原型为:public override void WriteLine(char value);public override void WriteLine(char buffer);public override void WriteLine(string value);2022-6-2236C#程序设计实用教程11.3.

36、2 写文件写文件下面将通过一个具体实例来演示应用StreamWriter类和StreamReader类的操作编程。【例例11-311-3】用StreamWriter类创建一个文件,然后通过StreamReader类读取文件并显示在文本框中。程序的运行界面如图11-3所示。程序运行时,单击“保存”按钮将把想保存的文本保存到“MyText.txt”文件中;单击“读取”按钮将把 “MyText.txt”文件打开,并把文件中的内容显示在文本框中;单击“退出”按钮将退出应用程序。设计步骤如下:(1)创建新项目,在窗体上添加3个按钮控件和1个文本框控件(其MultiLine属性设为True)。参见图11-设置控件对象的属性并适当调整控件在窗体的位置和大小。(2)编写代码。2022-6-2237C#程序设计实用教程11.3.2 写文件写文件实现按钮的单击事件代码如下:private void btnWrite_Click(object sender, EventArgs e) /在当前目录上,建立文件 FileStream

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论