C#-程序设计教程第8章_第1页
C#-程序设计教程第8章_第2页
C#-程序设计教程第8章_第3页
C#-程序设计教程第8章_第4页
C#-程序设计教程第8章_第5页
已阅读5页,还剩12页未读 继续免费阅读

下载本文档

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

文档简介

第8章流与文件8.1流的基本概念

8.2目录

8.3File类和FileInfo类

8.4文件的读写29九月2024第8章流与文件29九月20248.1流的基本概念文件(File)是计算机的基本概念,一般指存储于外部介质上的信息集合。每个文件应有一个包括设备及路径信息的文件名。其中外部介质主要指硬盘,也可包括光盘、软盘或磁带等。信息是数据和程序代码的总称。在程序中,文件的概念不单是狭义地指硬盘上的文件,所有的有输入输出功能的设备,例如键盘,控制台,显示器,打印机都被视为文件。这就是广义的文件的概念。就输入输出操作来说,这些外设和硬盘上的文件是一致的,对于程序员来说文件只与信息的输入输出相关,而且这种输入输出是串行序列形式的。于是,人们把文件的概念抽象为“流”(stream)。29九月20248.1流的基本概念

由此可见,文件流是程序语言按顺序操作文件内容的一种方式,是现实内外存数据交换的方法。在C#中则表现为一组派生于Stream的文件流类。例如FileStream类,以字节为单位读写文件;BinaryRead类和BinaryWrite类,以基本数据类型为单位读写文件,可以从文件直接读写bool、string、short、int等基本数据类型数据;StreamReader和StreamWriter类以字符或字符串为单位读写文件。使用流读写文件必须引入命名空间:System.IO。29九月20248.1流的基本概念C#为操作文件提供其他辅助类,包括DriveInfo、Directory、DirectoryInfo、File、FileInfo类。常用的类:File------实用类,提供许多静态方法,用于移动、删除、和复制文件。Directory------实用类,提供许多静态方法,用于移动、删除和复制目录。Path------实用类,用于处理路径名称。FileInfo------表示磁盘上的物理文件,具有可以处理此文件的方法,要完成对文件的读写工作,就必须创建Stream对像。DirectoryInfo------表示磁盘上的物理目录,具有可以处理此目录的方法FileStream-------表示可以被写或被读,或二者都可的文件,此文件可以同步或异步读和写StreamReader------从流中读取字符数据,并可通过使用FileStream被创建为基类。StreamWriter------向流写字符数据,可通过使用FileStream被创建为基类。29九月20248.2目录

在.NET中,我们可以用DriveInfo来获取驱动器信息。例如可以获得盘符、卷标、类型、大小、剩余空间等驱动器信息。

注意:直接访问DriveInfo的属性、方法时,可能会抛出异常。例如,程序所在的机器上没有安装软驱,但WINDOWS默认加载了软驱的驱动,所以程序在访问myDrive.DriveFormat属性时会因为无法争取读取‘软驱’的格式而抛出异常。解决方法也很简单,在访问之前加入if(myDrive.IsReady)来对驱动器的有效性进行验证。

例8-1使用DriveInfo类获得驱动器信息。不同的电脑运行结果不同。29九月2024VisualC#2008程序设计8.2目录8.2.2Directory类

将Directory类用于典型操作,如复制、移动、重命名、创建和删除目录,8-1表列出了Directory类的主要成员。他们都是静态成员方法,所以不需要实例化Directory类即可使用。

上述Directory的静态方法的最主要的参数为string类型的路径。在接受路径的成员中,路径可以是指文件或仅是目录。指定路径也可以是相对路径或者绝对路径。例如,以下都是可接受的路径:

“c:\\MyDir”表示C盘下的名为“MyDir”文件夹。

“MyDir\\MySubdir”表示程序当前路径下的相对路径,例如,如果程序在C盘根目录,则该相对路径及等同于“c:\\MyDir\\MySubdir”。

“\\\\MyServer\\MyShare”表示远程机器MyServer(IP或机器名)上的“MyShare”目录例如,代码Directory.Delete(“c:\\MyDir”),将删除C:\MyDir目录。这里的“\\”第一个反斜杠为C#所定义的转义字符。【例8-2】使用Directory类建立文件目录。29九月20248.2目录上节我们介绍了Directory类,Directory提供了一组静态方法,帮助用户完成对目录的操作。由于是静态方法,使用时不需要实例化,即可调用。但这也意味着该类无法为用户保存运行上下文及状态信息。因此,Directory的静态方法都需要安全检查。如果打算多次重用某个对象,可考虑使用DirectoryInfo的实例方法,而不是Directory

类的相应静态方法,因为并不总是需要安全检查。【例8-3】使用DirectoryInfo类建立文件目录。

29九月20248.3File类和FileInfo类File类用于对文件的典型操作,如复制、移动、重命名、创建、打开、删除和追加到文件。类似于Directory类,File的主要方法也为静态型。这意味用户无须实例化即可调用方法完成相应操作。File类的方法大多需要输入String型的路径参数,表明用户需要操作哪个文件。这些方法可接受的路径的表达方式与Directory类相同

29九月20248.3File类和FileInfo类

与File类不同的是,FileInfo类在使用时需要实例化。调用构造函数publicFileInfo(stringfileName)输入路径做为参数,可构造对象操作相应的文件。FileInfo与File的关系就如同DirectoryInfo与Directory的关系一样。由于FileInfo的实例方法不总是做安全性检查,当用户需要反复调用方法操作文件时,使用FileInfo的实例方法效率可能高一些。【例8-4】使用File和FileInfo类建立文件。29九月20248.4文件的读写我们知道任何数据包括字符,在计算机(包括文件)中是以二进制方式存储的。那么如何用二进制字节来表示各种字符呢。这就是字符编码(也称为字符集)所要规定的内容。最早使用ASCII7位字符集作为计算机通用的标准化编码,它规定了128个(后来扩展到256个)拉丁字母的字节表示法。很显然,该编码无法表示中文汉字字符、希腊字符、阿拉伯字符等非拉丁字符。29九月20248.4文件的读写为此,各个国家都创建了支持本国语言的字符集,例如中文字符集GB2312、GBK、GB18030-2005等。当然,各个国家的字符集显然无法被世界上所有其他国家的计算机软件系统所支持。举例来说,程序使用GB2312编码方式在文件中存储字符“A”。该文件被发送到国外某计算机中,如果该计算机上读文件的软件不支持GB2312操作系统,转而用其默认的编码来解释该文件,那么用户很可能会得到一些奇怪的字符而非字符A。这就是我们程序开发过程中经常遇到的乱码问题。29九月20248.4文件的读写为了解决乱码问题,实现软件的国际化,国际标准化组织制定了Unicode、UTF-8等字符集作为国际标准。这些字符集包含了世界上所有国家的字符。只要按国际标准的编码存储字符到文件中,那么其他按国际标准读文件的系统就一定能得到相同的字符。综上所述,我们在读写文件过程中一定要注意编码问题。使用某种编码存储字符,那么也要用该编码来读文件。29九月20248.4文件的读写

文件是计算机系统持久保存数据的一种方式。按照所存储的数据的不同,可分为文本文件和数据文件。文本文件被程序用来存储字符,例如英文字符、汉字、数学符号等等。程序用某种编码,将文件中的二进制解释为某些字符。数据文件被程序用以存储非字符数据,例如图像数据等。程序按照一定规则,对数据进行解释。例如,JPG图像文件,被读入程序后,按照JPG标准即可显示为一幅图片。29九月20248.4文件的读写文本文件与数据文件自身并没有什么区别。二者在后缀名、存储方式上并没有本质区别。程序可以用txt为后缀的文件存字符文本,也可以用bin为后缀的文件存(只不过Windows操作系统无法自动将bin关联到记事本程序罢了)。决定文件分类的其实是程序对文件的存储内容及解释方式。如果程序将字符作为内容存入文件,并以字符方式来解析文件中的数据,那么我们就可以把这个文件称为文本文件;如果程序直接将二进制字节数据存入文件,并将文件中的数据直接读到为内存中的二进制字节变量中,再进行进一步处理,那么该文件就是数据文件。

29九月20248.4文件的读写由此可见文本文件与数据文件的本质区别其实是程序读写文件所采用的方式。在C#中,提供了FileStream类,可按字节方式来读写文件;提供了StreamReader、StreamWrtier类,并以某种编码将字符写入或读出文件。

使用FileStream类可以建立文件流对象,用来打开和关闭文件,以字节为单位读写文件。也可以对于文件相关的操作系统句柄进行操作,如管道、标准输入和标准输出。FileStream类对象能对输入输出进行缓冲,从而提高性能。【例8-5】读写文件,写字节数组数据到文件的程序如下,该程序将建立文件c:\bytefile.bin,再将文件中的内容读出并显示到控制台界面。29九月20248.4文件的读写FileStream类操作的是字节和字节数组,而StreamReader允许将字符和字符串写入文件,它根据某字符编码(由用户通过参数指定,采用操作系统默认)转换为内存中的字符串变量,StreamWriter对象用

温馨提示

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

评论

0/150

提交评论