版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
第11章文件和流1精选课件ppt内容简介C#语言采用C++和Java语言中流的概念,来处理输入/输出方面的问题,但是使用起来要简单的多。本章介绍C#语言中,如何处理目录和文件夹,如何处理文件,如何使用流的概念读写文件。2精选课件ppt目录11.1文件和流的概念11.2对话框11.3多文档操作本章小结3精选课件pptC#语言具有平台无关性,不允许程序直接访问I/O设备,对包括文件在内的设备的I/O操作是以流的形式实现的,流是进行数据读写操作的基本对象。通过流的概念,程序员可以把输入和输出的数据看作是一个字节序列的数据流,而不必关心具体设备的特定细节。.NET中基于流的I/O操作方式,大大简化了开发人员的工作。
在C#中,有两种类型的流:文本流(textstream)和二进制流(binarystream)。(1)文本流。文本流是指在流中流动的数据是以字符的形式出现的。流中的每一个字符对应一个字节,用于存放对应的ASCII码值,因此文本流中的数据可以显示和打印出来,都是用户可以读懂的信息。11.1文件和流的概念4精选课件ppt(2)二进制流。二进制流中的数据是按照二进制编码的方式来存放文件的。二进制数据也可在屏幕上显示,但其内容无法读懂。二进制流是由与外部设备中的内容一一对应的一系列字节组成的。使用二进制流时没有字符翻译过程,而且所读写的字节数也与外部设备中的相同。
在.NET框架中,所有的输入和输出操作都要用到流。在System.IO命名空间中,包含了绝大部分与I/O操作相关的类。下面将重点介绍与文件管理和操作相关的类,以及如何利用它们来实现文件的读写。11.1文件和流的概念5精选课件ppt11.2文件的存储管理
.NET框架所提供的文件系统操作的类大多位于System.IO命名空间中,常用的类有DriveInfo、Directory、DirectoryInfo、Path、File、等,通过这些类可以浏览文件系统和执行相关操作(如移动、复制和删除文件)。6精选课件ppt11.2.1DriveInfo类.NET框架提供了DriveInfo类和DriveType枚举类型,以便于在程序中直接使用驱动器。
DriveInfo类提供了访问有关驱动器的信息的实例方法,使用DriveInfo类,可以确定有关驱动器的信息,包括驱动器盘符、驱动器类型、驱动器上的可空间等用。
DriveType枚举类型定义了驱动器类型常数,使用DriveType枚举类型,可以辅助确定DriveInfo类实例的驱动器类型。DriveInfo类的常用属性成员如表13-1所示,见教材。常用的方法成员是GetDrives,用于检索计算机上的所有逻辑驱动器的驱动器名称,并返回DriveInfo类型的数组。7精选课件pptDriveType枚举型的枚举值有7个:CDRom(光驱)、Fixed(固定磁盘,即硬盘)、Network(网络驱动器)、NoRootDirectory(没有根目录的驱动器)、Ram(RAM磁盘,如内存)、Removable(可移动设备,如软盘、U盘)和Unknown(未知类型的驱动器)。例如,要输出NTFS格式的硬盘驱动器的可用空闲空间大小,可编写代码如下:11.2.1DriveInfo类8精选课件pptDriveInfo[]drivers=DriveInfo.GetDrives();foreach(DriveInfodrindrivers){if(dr.DriveType==DriveType.Fixed&&dr.DriveFormat=="NTFS")Console.WriteLine("在"+dr.Name+"驱动器上还有"+dr.AvailableFreeSpace+"字节的可用空闲空间。");}11.2.1DriveInfo类9精选课件pptDirectory和DirectoryInfo类是.NET框架提供的用于目录管理的类。每个驱动器都有一个根目录,使用“\”表示。Directory和DirectoryInfo类的功能非常相似,利用它们,可以完成对目录及其子目录的创建、移动、删除等操作,甚至还可以定义隐藏目录和只读目录。
二者的区别在于:Directory类是一个静态类,其中提供的是静态方法,不能使用new关键字创建其对象;DirectoryInfo类是一个需要实例化的类,该类的实例对象表示计算机上的某一目录。Directory类的常用静态方法如表13-2所示,见教材。11.2.2Directory和DirectoryInfo类10精选课件ppt11.2.2Directory和DirectoryInfo类DirectoryInfo类的属性成员有Name(目录名称)、Exists(指示目录是否存在)、Parent
(父目录)、Root(根目录);常用的方法成员有Create(创建目录)、CreateSubDirectory(创建子目录)、Delete(删除目录)、GetDirectories(获取当前目录的子目录)、GetFiles(获取当前目录的文件列表)、MoveTo(移动目录)等。11精选课件ppt由于Directory类的所有方法都是静态的,如果只想执行一个目录操作,使用Directory静态方法的效率比使用相应的DirectoryInfo实例方法更高。大多数Directory方法要求给出当前操作目录的路径,且Directory类的静态方法都执行安全检查。但是,如果打算多次重用某个目录对象,可考虑使用DirectoryInfo的相应实例方法,因为它并不总是需要安全检查。11.2.2Directory和DirectoryInfo类12精选课件ppt.NET框架提供了Path类,以便于在程序中管理文件和目录路径。所谓路径,就是文件或目录所在的位置。要检索某个文件,必须首先确定该文件的路径。
路径由驱动器盘符、目录名、文件名、文件扩展名和分隔符组成,有两种表示方法:
一种是从驱动器的根目录开始书写,例如C:\Windows\System32\notepad.exe,这种路径称为绝对路径;
另一种是从当前目录位置开始书写,例如System32\notepad.exe(假设当前目录为C:\Windows),这种路径称为相对路径。11.2.3Path类13精选课件ppt
使用路径时要注意,C#将反斜杠“\”作为转义符。因此,当路径表示为字符串时,要使用两个反斜杠表示,例如“C:\\Windows\\System32\\notepad.exe”。C#还允许在字符串前添加“@”标志,以提示编译器不要把“\”字符视作转义符,而是视作普通字符,例如@"C:\Windows\System32\notepad.exe"。11.2.3Path类14精选课件ppt
Path类是一个静态类,可以用来操作路径的各个部分,如驱动器盘符、目录名、文件名、文件扩展名和分隔符等。Path类的常用属性成员有DirectorySeparatorChar(目录分隔符)、PathSeparator(路径分隔符)、VolumeSeparatorChar(卷分隔符)等;
常用的方法成员有GetDirecotryName(获取目录名)、GetExtension(获取文件扩展名)、Get(获取文件名)、GetFullPath(获取完整路径)、HasExtension(确定路径是否包括文件扩展名)等。11.2.3Path类15精选课件ppt11.2.3Path类例如,要输出路径C:\Windows\System32\notepad.exe中的目录名和文件名,可编写代码如下:stringpath=@"e:\Windows\System32\notepad.exe";Console.WriteLine(Path.GetDirectoryName(path));Console.WriteLine(Path.Get(path));上述代码中,目录名为"C:\Windows\System32",文件名为"notepad.exe。
提示:
Path类的大多数成员不与文件系统交互,并且不验证路径字符串指定的文件是否存在,但Path成员会验证指定路径字符串的内容。如果字符串包含无效的字符,则引发ArgumentException异常。16精选课件pptFile和类是.NET框架提供的用于文件管理的类,它们在功能上非常相似。
使用File和类,可以完成对文件的创建、删除、复制、移动和打开等操作,也可以获取和设置文件的有关信息,还可以协助创建流对象。
二者的区别在于,File类提供静态方法,而类提供实例方法。11.2.4File和类17精选课件ppt1.File类File类是一个静态类,它通过一系列静态方法来提供对磁盘文件的操作功能(如创建、复制、删除、移动和打开文件),并协助创建对象。File类的主要方法成员有Create(创建新文件)、Copy(复制文件)、Delete(删除文件)、Exists(判断文件是否存在)、Move(移动文件)、Open(打开文件)、
Replace(替换文件)、AppendAllText(将指定的文本追加到文件中,如果文件不存在则创建该文件)等。11.2.4File和类18精选课件ppt11.2.4File和类1.File类例如,在C盘根目录下有一个名为“a.txt”的文件,如果要对该文件进行复制、移动、替换和删除操作,可编写代码如下:("C:\\a.txt","C:\\b.txt");//将a.txt复制到b.txtif(("D:\\a.txt"))//如果D盘的a.txt存在("C:\\a.txt","D:\\a.txt");//用C盘的a.txt替换D盘的a.txtelse("C:\\a.txt","D:\\a.txt");//将a.txt移动到D盘("C:\\b.txt");//删除b.txt文件19精选课件ppt11.2.4File和类1.File类
提示:在表示文件路径名的字符串中,如果只写出文件名而不写出完整的路径名,那么默认目录就是当前程序可执行文件所在的目录。对于Windows应用程序,可通过Application类的静态属性StartupPath来获得程序可执行文件所在的目录路径。
每个文件都有自己的属性信息,其中文件的创建时间、最近一次访问时间和最近一次修改间,可通过如下方法进行读写:20精选课件ppt11.2.4File和类1.File类//读取文件创建时间DateTimedt1=("C:\\a.txt");//设置文件创建时间("C:\\a.txt",dt1.AddDays(10));//读取文件最近一次访问时间Console.WriteLine(("C:\\a.txt"));//读取文件最近一次修改时间Console.WriteLine(("C:\\a.txt"));("C:\\a.txt",dt1);//设置文件访问时间("C:\\a.txt",dt1);//设置文件修改时间21精选课件ppt11.2.4File和类22精选课件ppt11.2.4File和类1.File类File类还可用于读写文件内容,其中ReadAllText方法用于将文件所有内容读取为一个字符串,而WriteAlIText方法则将字符串写入文件。例如:("C:\\a.txt","我爱北京天安门");Console.WriteLine(("C:\\a.txt"));23精选课件ppt1.File类
为了进一步方便文本读写,File类还提供了将文件各行依次读取到一个字符串数组的ReadAllLines方法,以及将字符串数组逐行写入文件的WriteAllLines方法。
此外,File类的ReadAlIBytes方法可以将文件的所有字节读取到一个byte数组中,WriteAllBytes方法则将一个byte数组写入到文件中。11.2.4File和类24精选课件ppt11.2.4File和类2.类与File类不同,类仅可用于实例化的对象。如果使用同一个对象执行多个操作,使用类就比较有效,因为在构造类的对象时将读取合适文件的身份认证和其他信息,无论对每个对象调用了多少方法,都不需要再次读取这些信息。而File类在调用每个静态方法时,需要多次检查文件的内容。
类的主要方法成员有Create(创建新文件)、CopyTo(复制文件)、Delete(删除文件)、MoveTo(移动文件)、Open(打开文件)、Replace(替换文件)等。25精选课件ppt11.2.4File和类26精选课件ppt11.2.4File和类27精选课件ppt11.3文件的操作
文件在操作时表现为流,.NET中文件的输入输出都要用到流。流分为输入流和输出流,通常输入流用于读取数据(如键盘和鼠标),输出流用于向外部目标写数据(如显示器的屏幕)。本章主要讨论的输入流和输出流仅限于磁盘文件。
流支持以下三个基本操作:(1)读取(read):表示把数据从流传输到某种数据结构中,例如把数据从流输出到byte数组中;(2)写入(write):表示把数据从某种数据结构传输到流中,例如把byte数组中的数据传输到流中;(3)定位(seek):表示在流中查询或重新定位当前位置。28精选课件ppt
在.NET中,使用System.IO命名空间中的抽象基类Stream来代表流,其他表示流的类都是从Stream类继承的。数据源可以是文本字符串,也可以是从网络或某个I/O端口上的设备传来的数据原始字节。Stream类的派生类处理原始字节,TextReader和TextWriter类的派生类处理文本字符串。11.3文件的操作29精选课件ppt
11.3文件的操作30精选课件pptStream类是流的抽象基类,定义了流的基本功能,该类定义了一些处理原始字节流的范型成员,其作用是将数据抽象为独立于底层数据设备的字节流。1.Stream类的常用属性
根据I/O设备的不同,不同的流可能只支持Stream类中定义的功能中的一部分。例如,NetworkStream(网络流)不支持定位。通过使用Stream类及其派生类的CanRead、CanWrite、CanSeek等属性,可以查询当前流所支持的操作。11.3.1Stream类31精选课件ppt2.Stream类的常用方法Stream类提供了Read、Write、Seek等方法来支持流的基本操作,具体如下:(1)publicvirtualvoidClose()【功能】关闭当前流,并释放与之关联的所有资源。(2)publicabstractvoidFlush()【功能】清除当前流的所有缓冲区,并将所有缓冲数据写入到基础设备。11.3.1Stream类32精选课件ppt2.Stream类的常用方法(3)publicabstractintRead(byte[]buffer,intoffset,intcount)【功能】从当前流中读取最多count个字节,用它们顺序替换字节数组buffer的offset到(offset+count-1)之间的元素值,并将此流中的位置提升读取的字节数,最后返回读取的总字节数。如果当前可用的字节数没有请求的字节数那么多,则总字节数可能小于请求的字节数;如果当前已到达流的末尾,则为0。(4)publicvirtualintReadByte()
【功能】从当前流中读取一个字节,并将流内的位置向前推进一个字节,如果已到达流的末尾,则返回-1。11.3.1Stream类33精选课件ppt2.Stream类的常用方法(5)publicabstractvoidSetLength(longvalue)【功能】将当前流的长度设置为value。(6)publicabstractvoidWrite(byte[]buffer,intoffset,intcount)【功能】将字节数组buffer中从offset到(offset+count-1)之间的元素值写入当前流,并将此流中的当前位置提升写入的字节数。11.3.1Stream类34精选课件ppt2.Stream类的常用方法(7)publicvirtualvoidWriteByte(bytevalue)【功能】将字节value写入流内的当前位置,并将流内位置向前推进一个字节。(8)publicabstractlongSeek(longoffset,SeekOriginorigin)【功能】设置当前流中的位置并返回该位置。其中,参数origin用于获取新位置的参考点,offset指示相对于origin参数的字节偏移量。origin是SeekOrigin枚举类型的参数,该枚举类型定义了用于表示流中的参考点以供进行查找的枚举值常量,包括Begin(指定流的开头)、Current(指定流内的当前位置)和End(指定流的结尾)。11.3.1Stream类35精选课件ppt2.Stream类的常用方法
注意:C#中,I/O操作都是在当前位置进行。新建一个流对象时,当前位置一般位于流的起始位置,即Position属性值为0。
每次对流进行读写后,当前位置都会相应改变,也可以使用Position属性或Seek方法有目的地改变流中的当前位置。11.3.1Stream类36精选课件ppt
类是Stream的派生类,使用它可以创建一个文件流。
类可以对文件系统上的文件进行读取、写入、打开和关闭等操作,读写操作可以指定为同步或异步操作。而且,类对输入、输出进行了缓冲,从而提高了处理的性能。
类主要用于二进制文件的读写。要读写二进制文件,首先必须实例化一个对象。11.3.2类37精选课件ppt1.类的构造函数
创建一个对象,要调用其构造函数。为了创建不同属性的文件流,类中定义了多种构造函数。11.3.2类38精选课件ppt2.使用对象读写字节
文件流是对物理文件的封装,比如一个文件的内容可能分散在磁盘的多个地方,但通过对象仍可以进行连续的字节流读写,从字节流到物理存储的映射细节由对象隐藏。使用对象来读写字节,以进行文件的读、写、打开、关闭等操作。
例如,下面的代码创建了一个对象,通过该对象的WriteByte方法向文件中依次写入一组字节:fs=new("C:\\a.txt",);for(bytex=1;x<=10;x++)fs.WriteByte(x);
但是,这种方式只适合ASCII字符(对应编码在O~255之间),而不适合汉字等Unicode字符。11.3.2类39精选课件ppt2.使用对象读写字节
使用完对象后,一定要记住使用其Close方法来关闭文件流,这样才能保持文件的完整性。例如:fs.Close();
关闭流会释放与它相关的系统资源,并允许其他应用程序为同一个文件设置新的流。
在打开流和关闭流之间可以读写其中的数据,使用ReadByte和Read方法从文件中读取二进制数据,使用WriteByte和Write方法向文件中写入二进制数据。11.3.2类40精选课件pptStreamReader和StreamWriter类用于读写文本文件。不同于Stream的派生类,StreamReader和StreamWriter类用于处理文本而不是原始字节。它们分别继承自抽象类TextReader和TextWriter类,而TextReader和TextWriter类则定义了将文本作为字符进行读写的方法。要注意的是,这些方法依靠底层的对象完成具体的数据传输。
类只能处理原始字节,这使得它可以用来处理任何数据文件。但不能使用类将数据直接读写到字符串中,而必须将字符串转换为字节数组,或者进行相反的操作。StreamReader和StreamWriter类提供了按文本模式读写数据的方式。如果编程人员知道某个文件中包含文本,就可以使用它们方便地进行文本读取操作。11.3.3StreamReader和StreamWriter类41精选课件ppt
使用StreamReader和StreamWriter类提供的方法,可以根据流的内容自动检测出停止读取文本的位置。
例如,使用StreamReader.ReadLine()方法可以一次读取一行文本,使用StreamWriter.WriterLine()方法可以一次向文本文件中写入一行文本。
在读取文件时,流能够自动确定下一个回车符的位置,并在该处停止读取。在写入文件时,流会自动把回车符和换行符添加到文本的尾部。StreamReader和StreamWriter类能够识别不同的编码模式,其默认编码为UTF-8,而不是ASCII。11.3.3StreamReader和StreamWriter类42精选课件ppt1.使用StreamReader读文本文件StreamReader对象用于从文件中读取文本,可以从底层Stream对象创建StreamReader对象实例,也可以指定编码规范参数。(1)StreamReader的构造函数。创建一个StreamReader对象,要调用其构造函数,StreamReader类中定义了多种构造函数,常用构造函数的语法格式如下:【格式1】publicStreamReader(stringpath)【格式2】publicStreamReader(Streamstream)【格式3】publicStreamReader(stringpath,booldetectEncoding)【格式4】publicStreamReader(stringpath,Encodingencoding)11.3.3StreamReader和StreamWriter类43精选课件ppt11.3.3StreamReader和StreamWriter类1.使用StreamReader读文本文件(2)StreamReader的常用方法。
创建了StreamReader对象后,就可以使用它的方法。44精选课件ppt2.使用StreamW
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 自然水域救生员安全规程强化考核试卷含答案
- 制药菌种培育工安全宣教考核试卷含答案
- 电子商务网站建设合同协议
- 奶油搅拌压炼工QC管理能力考核试卷含答案
- 三氯硅烷生产工安全生产能力考核试卷含答案
- 中兽医员岗前基础实操考核试卷含答案
- 钨钼粉末制造工变革管理强化考核试卷含答案
- 彩画作文物修复师复测评优考核试卷含答案
- 石油钻井工复试测试考核试卷含答案
- 纺织品缝纫工成果强化考核试卷含答案
- 电子票据技术 课件 李赞 项目1-3 电子票据的概述;电子票据的认知与分类;电子票据的开具与填写
- 河南省家政服务业技能大赛家务服务赛项技术文件
- 组塔架线培训课件
- 学术基本要素:专业论文写作学习通超星期末考试答案章节答案2024年
- 2024新高考I卷全国统一考试高考生物试题(真题+答案)
- 河北省石家庄市新华区2023-2024学年七年级下学期期末数学试题
- 危重心律失常的处治
- HG/T 6262-2024 再生磷酸铁(正式版)
- 2020年10月自考00178市场调查与预测试题及答案含解析
- 建筑减震器中英文对照外文翻译文献
- 城轨车辆常见制动系统-EP2002制动系统
评论
0/150
提交评论