您好,欢迎访问三七文档
第8章文件操作C#程序设计37-2第8章文件操作•文件和流的概念和FileStream类•读写文本文件•读写二进制文件•读写内存流•File类和Directory类C#程序设计37-38.1文件和流•文件流像自来水管道中的水流一样,让我们通过无形的管道来对磁盘文件进行操作,本章重点介绍如何利用C#文件流来操作磁盘文件。C#程序设计37-48.1.1文件和流的概念•C#中流的概念可以和生活中的“流”相对应。在生活中有水流、电流等,首先要有一个源头,还需要有传输的管道,水流有河床、水管等作为传输管道,电流有电线,而这些“流”都会有一个目的地,就是它的流向。C#中的流也需要有源头——文件,还需要有数据流入流出的管道以及数据的流向。•C#采用流模型读写文件里的数据,按照流的方向把流分为两种:输入流和输出流。输入流用于将数据读到程序可以访问的内存或变量中。输入流可以来自任何源,在此我们主要分析读取磁盘文件,可以理解为以文件为源,以内存为目的地。输出流用于向某些外部目标写入数据,可以是磁盘文件、打印设备或另一个程序。在此我们主要关注以内存为源,文件为目的地的输出流。C#程序设计37-5•流是二进制字节序列的面向对象的抽象概念,.NET中用流进行输入输出操作。文件从广义上可看成是保存在磁盘上的二进制字节,是按一定格式存储的信息,能用流对文件进行操作,如:读取文件内容、将信息写入文件等。•Stream类是所有流类的抽象基类,它提供了流的基本功能。流是字节序列的抽象概念,如文件、输入/输出设备、内部进程通信管道或者TCP/IP套接字都可以看作流。C#程序设计37-6流涉及以下三个基本操作。•⑴从流读取:读取是从流到数据结构(如字节数组)的数据传输。•⑵向流写入:写入是从数据结构到流的数据传输。•⑶支持查找:查找是对流内的当前位置进行查询和修改。C#程序设计37-7System.IO命名空间的类•⑴操作流的类:包括文件流、内存流,以及读写这些流的类•⑵操作目录的类:包括对文件夹目录进行创建、移动、删除等操作,以及对磁盘信息进行访问的类。•⑶操作文件的类:包括对文件进行创建、移动、删除等操作,以及获取文件信息等•比较常用的类有:FileStream类、StreamReader类、StreamWriter类、BinaryReader类、BinaryWriter类、MemoryStream类、File类、FileInfo类、Directory类和DirectoryInfo类等,下面小节将对这些比较常用的类逐一介绍。C#程序设计37-88.1.2FileStream类•FileStream称为文件流,用于读取和写入文件,FileStream类的实例实际上代表一个磁盘文件。FileStream类继承于Stream类。下表列出了FileStream类的常见的成员及其说明。C#程序设计37-9FileStream类成员•⑴Position属性。获取或设置此流的当前位置。属性值:此流的当前位置。•⑵Close()方法。在创建和使用完一个流后一定要将其及时关闭。•⑶Flush()方法。在调用Close()方法之前调用Flush()方法,可以将以前写入缓冲区的任何数据都复制到文件中,并且缓冲区被清除。•⑷Seek()方法。使用代码如下。–aFile.Seek(8,SeekOrigin.Begin)C#程序设计37-10FileStream类对象时的文件打开方式•FileMode.Append如果文件存在则打开,并把读写位置定位到文件末尾。如果文件不存在则创建新文件。这种方式只能和FileAccess.Write访问方式一起使用。•FileMode.Create创建一个新文件。如果文件存在。则覆盖原有文件。•FileMode.CreateNew创建一个新文件,如果文件存在则出现异常。•FileMode.Open打开一个已有文件。•FileMode.OpenOrCreate打开一个已有文件,如果文件不存在,则创建一个新文件。•FileMode.Truncate打开一个已有文件。然后把文件的长度置为0。构造FileStream流对象时的文件访问方式。•FileAccess.Read对文件进行读访问,只能从文件中读数据。•FileAccess.ReadWrite对文件进行读写访问。•FileAccess.Write对文件进行写访问,只能向文件中写入数据。C#程序设计37-11实例:打开一个现有文件并将信息显示到文本框中01openFileDialog1.Filter=文本文件(*.txt)|*.txt;//打开文件对话框的筛选器02openFileDialog1.ShowDialog();//显示打开文件对话框03textBox1.Text=openFileDialog1.FileName;//在文本框中显示打开文件的文件名04FileStreamfs=File.OpenRead(textBox1.Text);//创建FileStream实例对象05byte[]b=newbyte[1024];//创建字节数组b06while(fs.Read(b,0,b.Length)0)//循环读文件内容到缓冲区b中07{08textBox2.Text=Encoding.Default.GetString(b);//将字节数组中的字节解码为字符串09}C#程序设计37-12第8章文件操作•文件和流的概念和FileStream类•读写文本文件•读写二进制文件•读写内存流•File类和Directory类C#程序设计37-138.2读写文本文件•除了使用FileStream类读写文本文件,.NET还提供了StreamWriter类和StreamReader类专门处理文本文件,这两个类从底层封装了文件流,读写时不需要重新进行编码。C#程序设计37-148.2.1StreamReader类•StreamReader类可以读取标准文本文件的各行信息。StreamReader类的构造函数有多个重载,下面列出比较常用的两种方式演示如何创建一个StreamReader类的实例:01//指定文件路径作为参数02stringstrFilePath=@c:\test.txt;03StreamReaderReader=newStreamReader(strFilePath);04//指定文件路径和编码作为参数05stringstrFilePath=@c:\test.txt;06StreamReaderReader=newStreamReader(strFilePath,Encoding.Default);C#程序设计37-15•下表列出了StreamReader类常用的方法及其说明。•成员名称类别说明•Close方法关闭•StreamReader对象和基础流,并释放与读取器关联的所有系统资源•Equals方法确定两个Object实例是否相等•Read方法读取输入字符串中的下一个字符或下一组字符•ReadLine方法从基础字符中读取一行•ToString方法返回表示当前Object的StringC#程序设计37-16•下面对StreamReader类中比较重要的方法进行详细介绍。⑴Close()方法。在创建和使用完一个StreamReader后一定要将其及时关闭。⑵ReadLine()方法。返回值为输入流中的下一行;如果到达了输入流的末尾,则为空引用。C#程序设计37-178.2.2StreamWriter类•StreamWriter类可以把数据写入文本文件,如果指定的文件不存在,可以先创建一个新文件。StreamWriter类的构造函数有多个重载,下面列出比较常用的两种方式演示如何创建一个StreamWriter类的实例:01//指定文件路径作为参数02stringstrFilePath=@c:\test.txt;03StreamWriterWriter=newStreamWriter(strFilePath);04//指定文件路径和Boolean作为参数05stringstrFilePath=@c:\test.txt;06StreamWriterWriter=newStreamWriter(strFilePath,true);C#程序设计37-18•下表列出了StreamWriter的常用成员及其说明:•成员名称类别说明•Close方法关闭•StreamWriter对象和基础流•Equals方法确定两个Object实例是否相等•Write方法写入到StringWriter的实例中•WriteLine方法写入重载参数指定的某些数据,后跟行结束符•ToString方法返回表示当前Object的StringC#程序设计37-19•下面对StreamWriter类中比较重要的方法进行详细介绍。•⑴Close()方法。在创建和使用完一个StreamWriter后一定要将其及时关闭。•⑵WriteLine()方法。返回值:默认行结束符是(“\r\n”),但使用NewLine属性可以更改此值。WriteLine()只用于字符串,并且会自动追加一个换行符。Write()方法不追加换行符,可以向文本流写入字符串,也可以写任何基本数据类型(int32、Single等)的文本形式。C#程序设计37-20第8章文件操作•文件和流的概念和FileStream类•读写文本文件•读写二进制文件•读写内存流•File类和Directory类C#程序设计37-218.3读写二进制文件•对文件进行操作的常见模式有两种:文本模式和二进制模式。前面给大家介绍了如何读写文本文件,下面我们再给大家介绍如何读写二进制文件。读写二进制文件的类主要有BinaryWriter和BinaryReader类。C#程序设计37-22第8章文件操作•文件和流的概念和FileStream类•读写文本文件•读写二进制文件•读写内存流•File类和Directory类C#程序设计37-238.4读写内存流•前面介绍了文件流类FileStream,除文件流之外还存在多种流,例如:网络流、内存流、缓存流等。本节我们来介绍读写内存流。C#程序设计37-248.4.1读写内存•MemoryStream称为内存流,是内存本身的抽象概念,必须注意它是内存而不是以磁盘或网络连接作为基础的存储区。MemoryStream封装以无符号字节数组形式存储的数据,该数组在创建MemoryStream对象时被初始化,或者该数组可创建为空数组。可在内存中直接访问这些封装的数据。内存流可降低应用程序中对临时缓冲区和临时文件的需要,在程序设计中有一定的应用。FileStream对象的数据来自文件,而MemoryStream对象的数据来自内存缓冲区。这两个类都继承自Stream类。C#程序设计37-258.4.2读写缓冲区•BufferdeStream称为内存缓冲区流,是内存中缓冲区的抽象,它可以读取或写入另一个流。缓冲区是内存中的字节快,用于缓存数据,从而减少对操作系统的调用次数。因此,缓冲区可提高程序读取和写入数据的性能。虽然使用缓冲区可进行读取和写入,但不能同时进行这两个操作。BufferedStream经常和其他类型的流联合使用。•下面我们举个例子来说明MemoryStream类的用法。C#程序设计37-26第8章文件操作•文件和流的概念和FileStream类•读写文本文件•读写二进制文件•读写内存流•File类和Directory类C#程序设计37-278.5文件和文件夹操作•在我们进行程序设计时,接触最多的就是和文件打交道,为了便于对文件和目录进行操作(包括创建,复制,删除,移动和打开文件或目录),.Net提供了文件和目录类。C#程序设计37-288.5.1File类和FileInfo类•File类和FileInfo类用来管理文件。这两个类的功能类似,区别在于File类是一个静态的类,不能实例化,可以使用该类的静态方法管理文件。而FileInfo类需要实例化后,再使用File
本文标题:第9章c文件操作
链接地址:https://www.777doc.com/doc-2113274 .html