您好,欢迎访问三七文档
当前位置:首页 > 商业/管理/HR > 管理学资料 > 07.理论.第6章.C#中的文件处理
第6章C#中的文件处理本章目标了解System.IO命名空间掌握的文件的读写方法文件的基本操作目录的基本操作本章能实现如下任务制作文件分割系统132HOPETECHNOLOGYWinForm桌面程序编程本章简介在前面的章节中,我们学习了WinForm控件的基本应用,学习了文本框,标签,按钮,列表框和组合框,以及单文档及多文档,菜单等控件的属性和事件,掌握基本窗体应用程序的开发设计。从本章开始,主要是介绍通过System.IO命名空间来对文件或目录进行存取,包括文件读取、文件写入、文件删除、变更文件名、文件移动、文件复制、文件访问时间相关信息、建立目录、删除目录、搬移目录、列出目录所有文件和列出目录所有子目录等。学完本章并完成程序开发的实践活动,你将具备操作文件和目录的基本能力,对System.IO这个命名空间有充分的了解。本章单词请在预习前记忆以下单词。1.binary2.IO3.stream4.attribute5.creation6.directory133第6章C#中的文件处理6.1什么是文件处理文件处理(FileProcessing)是使用计算机来处理信息,提供文件建创建、存储、更改、删除、复制、搬移、检索文件的内容等功能,在个别的文件中包含许多记录(Records)的集合(比如数据文件)。总体来说存储于磁盘上的字节集合被称为文件,文件可以是程序文件,文本文件,图像文件,数据库文件或任何其他类型。从的存储方式来说,文件分为以下3种:循序文件(SequentialFile):每一个记录依序存入,依序读出,记录长度可以不同,是最简单的文件结构,常用存储媒体为磁带。哈希文件/随机文件(HashedFile/RandomFile):随机存取文件,假如你需要存取单一特定记录,不用取回所有记录,用随机存取方式即可。每一笔记录均为固定长度,存取数据只需指明是第几笔记录。索引文件(IndexedFile):索引文件结合数据文件和索引,可以循序处理或随机处理。每种编程语言都有自己向磁盘写数据和从磁盘读数据的技术,通常是以字节形式向磁盘写数据。计算机的文件处理主要优点有3点:快速处理能力。低投资,性能较低的计算机也能处理数据。可提供应用程序环境配置文件的简易存取方式。当然,文件处理方式也存在一些缺点,如下所示。如数据重复性和数据冗余、数据不一致、受限制的数据分享、并且浪费存储空间、安全性问题等等。我们已经知道了计算机文件处理的优缺点,尽管现实生活中虽然计算机文件处理有缺点,但是我们还是比较多的使用计算机处理文件,毕竟其的效率是比较高的。134HOPETECHNOLOGYWinForm桌面程序编程6.2System.IO命名空间.NETFramework3.5下的System.IO命名空间提供读取、写入文件(File)与数据流(Streams)的类,以及进行文件处理与目录处理的类成员,文件处理是通过各种文件I/O方法来进行的,例如Create()、Delete()、Exists()、Move()、Open()和AppendText()等。文件本身具有“持续性存储器”(PersistentStorage)特性,是一连串已排序字节序列的集合,包含完整的路径和文件名。例如,存储在硬盘的纯文本文件、应用执行文件等。而数据流是“数据流通的管道”,由一连串的“字节”或“字符”所组成,在许多存储媒体中用来支持在存放区写入和读取字节。例如,网络、内存和磁带数据流。一般常见的存储媒介,如网络、内存暂存区之中的数值、字符、字符串、对象等各种数据类型,它们的输出/输入操作都是通过数据流来运作的,数据流是属于“暂时性存储器”(TemporalStorage)。System.IO命名空间下的有非常多的类来支持I/O操作,每个类又有许多的方法,在这里不能全部讲清楚,我们这里列出其常用的类和方法,如下表6.1所述:类型名称用途成员举例类BinaryReaderBinaryWriter二进制阅读(书写)器,以二进制形式读(写)文件Read(),ReadBoolean(),ReadByte(),ReadChar(),ReadInt32(),Write()…Directory目录处理,目录的创建、移动等Delete(),Exists(),Move(),GetFiles()File处理文件的打开、删除等操作Copy(),Create(),Open(),GetAttribute()FileStream文件流,支持文件的同、异步读写Read(),Write(),Seek()StreamReaderStreamWriter流阅读(书写)器,从(往)字节流(包括文件流)中读(写)数据Read(),Write(),ReadLine(),WriteLine()135第6章C#中的文件处理StringReaderStringWriterTextReaderTextWriter字符串(文本)读(写)器Read(),Write(),ReadToEnd(),Peek()枚举FileAccess文件操作方式,读、写、读/写Read,Write,ReadWriteFileAttribute文件/目录的属性,系统、只读、隐藏Directory,Hidden,Normal,ReadOnly,System,TemporaryFileMode文件打开方式,追加、新建、清空、打开、只读Append,Create,OpenOrCreate,TruncateSeekOrigin读写指针的位置,开头,结尾Begin,Current,EndFileShare文件是否共享,读共享,写共享等Inheritable、None、Read、ReadWrite和Write表6.1IO命名空间中的常用类6.2FileStream类FileStream类在文件操作中是一个比较重要的类,此类提供进行读取、写入、打开和关闭文件系统上的文件,以及操作其他文件相关的操作系统处理,包括管道、标准输入和标准输出。而存取操作方式可指定为“同步的”或“异步的”。其成员Seek()方法可支持对文件的随机存取。使用FileStream会缓冲处理I/O动作,可以获得较高的性能表现同时FileStream类也可以为其他的文件操作类提供支持,具体的说明看后面的代码。FileStream类的默认方式为同步读/写操作,FileStream构造函数有许多重写形式,以方便创建FileStream类的实例或对象。在下表6.2中列出了部分重写的构造函数。构造函数中使用的FileMode,FileAccess和FileShare参数都是枚举类型,在上表6.1中已经有讨论。FileStream已重写构造函数FileStream(stringFilePath,FileMode)FileStream(stringFilePath,FileMode,FileAccess)FileStream(stringFilePath,FileMode,FileAccess,FileShare)136HOPETECHNOLOGYWinForm桌面程序编程表6.2FileStream类的构造函数要构造FileStream实例,需要以下4条信息:要访问的文件。表示如何打开文件的模式。例如,创建一个新文件或打开一个现有的文件。如果打开一个现有的文件,写入操作是覆盖文件原来的内容,还是添加到文件的末尾?表示访问文件的方式——是只读、只写,还是读写?共享访问——表示是否独占访问文件。如果允许其他流同时访问文件,则这些流是只读、只写,还是读写文件?代码片段1描述了FileStream构造函数的一个实例。代码片段1:…………FileStreamfstream=newFileStream(Test.cs,FileMode.OpenOrCreate,FileAccess.ReadWrite,FileShare.None);………实例1用FileStream设计一个简单的文件分割,将一个大文件按指定的大小分割成多个小的文件。效果如图6.1所示:图6.1文件分割【参考代码】privatevoidbtnSplit_Click(objectsender,System.EventArgse)137第6章C#中的文件处理{FileStreaminFile=newFileStream(f.ToString(),FileMode.OpenOrCreate,FileAccess.Read);for(inti=0;iInt32.Parse(txtSplitFragmentCount.Text);i++){FileStreamoutFile=newFileStream(f.ToString()+i+.fsm,FileMode.OpenOrCreate,FileAccess.Write);intdata=0;byte[]buffer=newbyte[fragmentsize];if((data=inFile.Read(buffer,0,fragmentsize))0){outFile.Write(buffer,0,data);}outFile.Close();}inFile.Close();statusBarSplit.Text=文件拆分成功完成!;}以上代码的运行效果如图6.1所示:6.3从文件中取出内容在本节中,主要介绍两种文件内容读取器:BinaryReader类和StreamReader类,让你充分了解文件内容以二进制和数据流读取。6.3.1BinaryReader——二进制文件内容读取器BinaryReader类提供特定的编码方式,将基本数据类型当做二进制值来进行读取操作,通常用于读取图文件,也可读取文本文件。关于BinaryReader构造函数声明语法范例如下。FileStreamfs=newFileStream(@C:\temp.txt,FileMode.Open);打开要分割的大文件创建要分割的小文件138HOPETECHNOLOGYWinForm桌面程序编程using(BinaryReaderbr=newBinaryReader(fs)){//声明二进制文件读取方法}关于BinaryReader类常用的成员方法如表6.3所示。实例2用BinaryReader设计一个简单的文件内容读取程序,除了将文件内容读取结果显示出来外,也会告诉你文件所在的路径位置和文件的大小。【参考代码】privatevoidbtnRead_Click(objectsender,EventArgse){stringmsg=;stringfilePath=Application.StartupPath+@\Test.txt;try{FileStreamfs=newFileStream(filePath,FileMode.Open);if(File.Exists(filePath)){方法名称功能说明Close()关闭目前BinaryReader对象Read()会根据所使用的Encoding从数据流读取的特定字符,自基础数据流读取字符,并且将数据流中目前所在位置往前移动ReadString()从目前数据流读取字符串ReadByte()从目前数据流读取1字节,并且移动目前数据流所在位置1字节,会返回Byte数据类型ReadDecimal()从目前数据流读取十进制值,并且移动目前数据流所在位置16字节,会返回decimal数据类型ReadInt32()从目前数据流读取4字节带正负号整数值,并且移动目前数据流所在位置4字节,会返回int数据类型获取文件的路径创建一个FileStream对象139第6章C#中的文件处理using(BinaryReaderbr=newBinaryReader(fs)){stringresult=br.ReadString();msg=;longsize=br.BaseStream.Length;msg=msg+文件位置:+filePath+\n;msg=msg+文件大小:+si
本文标题:07.理论.第6章.C#中的文件处理
链接地址:https://www.777doc.com/doc-5940402 .html