版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
VisualC#2008程序设计
第9章流与文件17十二月2023VisualC#2008程序设计第9章流与文件9.1流的基本概念
9.2目录
9.3File类和FileInfo类
9.4文件的读写17十二月2023VisualC#2008程序设计9.1流的基本概念文件(File)是计算机的基本概念,一般指存储于外部介质上的信息集合。每个文件应有一个包括设备及路径信息的文件名。其中外部介质主要指硬盘,也可包括光盘、软盘或磁带等。信息是数据和程序代码的总称。在程序中,文件的概念不单是狭义地指硬盘上的文件,所有的有输入输出功能的设备,例如键盘,控制台,显示器,打印机都被视为文件。这就是广义的文件的概念。就输入输出操作来说,这些外设和硬盘上的文件是一致的,对于程序员来说文件只与信息的输入输出相关,而且这种输入输出是串行序列形式的。于是,人们把文件的概念抽象为“流”(stream)。使用流读写文件必须引入命名空间:System.IO。17十二月2023VisualC#2008程序设计9.1流的基本概念C#为操作文件提供其他辅助类,包括DriveInfo、Directory、DirectoryInfo、File、FileInfo类。常用的类:File------实用类,提供许多静态方法,用于移动、删除、和复制文件。Directory------实用类,提供许多静态方法,用于移动、删除和复制目录。Path------实用类,用于处理路径名称。FileInfo------表示磁盘上的物理文件,具有可以处理此文件的方法,要完成对文件的读写工作,就必须创建Stream对像。DirectoryInfo------表示磁盘上的物理目录,具有可以处理此目录的方法FileStream-------表示可以被写或被读,或二者都可的文件,此文件可以同步或异步读和写StreamReader------从流中读取字符数据,并可通过使用FileStream被创建为基类。StreamWriter------向流写字符数据,可通过使用FileStream被创建为基类。FileSystemWatcher----FileSystemWatcher是用于监控文件和目录,并在这些位置发生变化时,给出应用程序可以捕获的事件。17十二月2023VisualC#2008程序设计9.2目录在.NET中,我们可以用DriveInfo来获取驱动器信息。例如可以获得盘符、卷标、类型、大小、剩余空间等驱动器信息。【例9-1】使用DriveInfo类获得驱动器信息。//Ch09_01.csusingSystem;usingSystem.Collections.Generic;usingSystem.Text;usingSystem.IO;//自己添加的代码namespaceCh09_01{classProgram{publicstaticvoidMain(){StringBuildersb=newStringBuilder();//声明DriveInfo类对象,并使用GetDrives方法取得目前
//系统中所有逻辑磁盘驱动器的DriveInfo类型的数组
DriveInfo[]myAllDrives=DriveInfo.GetDrives();
17十二月2023VisualC#2008程序设计9.2目录try{foreach(DriveInfomyDriveinmyAllDrives){if(myDrive.IsReady){sb.Remove(0,sb.Length);sb.Append("磁盘驱动器盘符:");sb.AppendLine(myDrive.Name);sb.Append("磁盘卷标:");sb.AppendLine(myDrive.VolumeLabel);sb.Append("磁盘类型:");sb.AppendLine(myDrive.DriveType.ToString());sb.Append("磁盘格式:");sb.AppendLine(myDrive.DriveFormat);sb.Append("磁盘大小:");sb.AppendLine(myDrive.TotalSize.ToString());sb.Append("剩余空间:");sb.AppendLine(myDrive.AvailableFreeSpace.ToString());sb.Append("总剩余空间(含磁盘配额):");sb.AppendLine(myDrive.TotalFreeSpace.ToString());sb.AppendLine("-----------------------------------------");Console.WriteLine(sb);}}}catch(Exceptionex){Console.WriteLine(ex.Message);}}}}17十二月2023VisualC#2008程序设计9.2目录将Directory类用于典型操作,如复制、移动、重命名、创建和删除目录。也可将Directory类用于获取和设置与目录的创建、访问及写入操作相关的DateTime
信息。
【例9-2】使用Directory类建立文件目录。//Ch09_02.csusingSystem;usingSystem.Collections.Generic;usingSystem.Text;usingSystem.IO;//自己添加的代码namespaceCh09_02{classProgram{publicstaticvoidMain(){//这里使用的字符串引导符“@”的表达方式。在C#中字符串常数前加“@”,表示所引导的字符串按原样解释。
stringpath=@"c:\MyDir";//stringpath="c:\\MyDir";//这里使用了转义字符”\”的表达方式17十二月2023VisualC#2008程序设计9.2目录
try{if(!Directory.Exists(path)){Directory.CreateDirectory(path);Console.WriteLine("目录{0}不存在,创建了目录{0}",path);}else{Console.WriteLine("目录{0}已存在",path);}}catch(Exceptione){Console.WriteLine("Theprocessfailed:{0}",e.ToString());}}}}17十二月2023VisualC#2008程序设计9.2目录上节我们介绍了Directory类,Directory提供了一组静态方法,帮助用户完成对目录的操作。由于是静态方法,使用时不需要实例化,即可调用。但这也意味着该类无法为用户保存运行上下文及状态信息。因此,Directory的静态方法都需要安全检查。如果打算多次重用某个对象,可考虑使用DirectoryInfo的实例方法,而不是Directory
类的相应静态方法,因为并不总是需要安全检查。
17十二月2023VisualC#2008程序设计9.2目录【例9-3】使用Directory类建立文件目录。//Ch09_03.csusingSystem;usingSystem.Collections.Generic;usingSystem.Text;usingSystem.IO;//自己添加的代码namespaceCh09_03{classProgram{publicstaticvoidMain(){//这里使用的字符串引导符“@”的表达方式。在C#中字符串常数前加“@”,表示所引导的字符串按原样解释。
stringpath=@"c:\MyDir";//stringpath="c:\\MyDir";//这里使用了转义字符”\”的表达方式
try{DirectoryInfodi=newDirectoryInfo(path);//将DirectoryInfo实例化
if(!di.Exists){Console.WriteLine("目录{0}不存在,创建了目录{0}",path);di.Create();}else{Console.WriteLine("目录{0}已存在",path);}}catch(Exceptione){Console.WriteLine("Theprocessfailed:{0}",e.ToString());}}}}17十二月2023VisualC#2008程序设计9.3File类和FileInfo类File类用于对文件的典型操作,如复制、移动、重命名、创建、打开、删除和追加到文件。也可将File类用于获取和设置文件属性或有关文件创建、访问及写入操作的DateTime
信息。类似于Directory类,File的主要方法也为静态型。这意味用户无须实例化即可调用方法完成相应操作。File类的方法大多需要输入String型的路径参数,表明用户需要操作哪个文件。这些方法可接受的路径的表达方式与Directory类相同
17十二月2023VisualC#2008程序设计9.3File类和FileInfo类【例9-4】使用Directory类建立文件目录。//Ch09_04.csusingSystem;usingSystem.Collections.Generic;usingSystem.Text;usingSystem.IO;//自己添加的代码namespaceCh09_04{classProgram{publicstaticvoidMain(){stringpath=@"c:\MyTest.txt";//以下是File类的用法
//if(!File.Exists(path))//{////创建一个文件,并返回StreamWriter对象,以使用户可以对文件进行写字符操作。
//using(StreamWritersw=File.CreateText(path))//{//sw.WriteLine("Hello");//sw.WriteLine("And");//sw.WriteLine("Welcome");//}//}
17十二月2023VisualC#2008程序设计9.3File类和FileInfo类////打开一个文件,并返回StreamReader对象,以使用户可以从文件读取字符
//using(StreamReadersr=File.OpenText(path))//{//strings="";//while((s=sr.ReadLine())!=null)//{//Console.WriteLine(s);//}//}//以下是FileInfo类的用法,功能一致
FileInfofi1=newFileInfo(path);if(!fi1.Exists){//如果不存在就创建相应文件,并写入字符.using(StreamWritersw=fi1.CreateText()){sw.WriteLine("Hello");sw.WriteLine("And");sw.WriteLine("Welcome");}}//打开文件,并从中读取字符
using(StreamReadersr=fi1.OpenText()){strings="";while((s=sr.ReadLine())!=null){Console.WriteLine(s);}}}}}17十二月2023VisualC#2008程序设计9.4文件的读写我们知道任何数据包括字符,在计算机(包括文件)中是以二进制方式存储的。那么如何用二进制字节来表示各种字符呢。这就是字符编码(也称为字符集)所要规定的内容。最早使用ASCII7位字符集作为计算机通用的标准化编码,它规定了128个(后来扩展到256个)拉丁字母的字节表示法。很显然,该编码无法表示中文汉字字符、希腊字符、阿拉伯字符等非拉丁字符。17十二月2023VisualC#2008程序设计9.4文件的读写为此,各个国家都创建了支持本国语言的字符集,例如中文字符集GB2312、GBK、GB18030-2005等。当然,各个国家的字符集显然无法被世界上所有其他国家的计算机软件系统所支持。举例来说,程序使用GB2312编码方式在文件中存储字符“A”。该文件被发送到国外某计算机中,如果该计算机上读文件的软件不支持GB2312操作系统,转而用其默认的编码来解释该文件,那么用户很可能会得到一些奇怪的字符而非字符A。这就是我们程序开发过程中经常遇到的乱码问题。17十二月2023VisualC#2008程序设计9.4文件的读写为了解决乱码问题,实现软件的国际化,国际标准化组织制定了Unicode、UTF-8等字符集作为国际标准。这些字符集包含了世界上所有国家的字符。只要按国际标准的编码存储字符到文件中,那么其他按国际标准读文件的系统就一定能得到相同的字符。综上所述,我们在读写文件过程中一定要注意编码问题。使用某种编码存储字符,那么也要用该编码来读文件。17十二月2023VisualC#2008程序设计9.4文件的读写文本文件与数据文件自身并没有什么区别。二者在后缀名、存储方式上并没有本质区别。程序可以用txt为后缀的文件存字符文本,也可以用bin为后缀的文件存(只不过Windows操作系统无法自动将bin关联到记事本程序罢了)。决定文件分类的其实是程序对文件的存储内容及解释方式。如果程序将字符作为内容存入文件,并以字符方式来解析文件中的数据,那么我们就可以把这个文件称为文本文件;如果程序直接将二进制字节数据存入文件,并将文件中的数据直接读到为内存中的二进制字节变量中,再进行进一步处理,那么该文件就是数据文件。由此可见文本文件与数据文件的本质区别其实是程序读写文件所采用的方式。在C#中,提供了FileStream类,可按字节方式来读写文件;提供了StreamReader、StreamWrtier类,并以某种编码将字符写入或读出文件。17十二月2023VisualC#2008程序设计9.4文件的读写使用FileStream类可以建立文件流对象,用来打开和关闭文件,以字节为单位读写文件。也可以对于文件相关的操作系统句柄进行操作,如管道、标准输入和标准输出。FileStream类对象能对输入输出进行缓冲,从而提高性能。【例9-5】读写文件,写字节数组数据到文件的程序如下,该程序将建立文件d:/g1.bin,在讲文件中的内容读出并显示到控制台界面。17十二月2023VisualC#2008程序设计9.4文件的读写//Ch09_05.csusingSystem;usingSystem.Collections.Generic;usingSystem.Text;usingSystem.IO;//自己添加的代码namespaceCh09_05{classProgram{publicstaticvoidMain(){byte[]data1=newbyte[10];//建立字节数组
for(inti=0;i<10;i++)//为数组赋值
data1[i]=(byte)i;FileStreamfs1=newFileStream("c:\\bytefile.bin",FileMode.Create);//写data字节数组中的所有数据到文件
fs1.Write(data1,0,10);fs1.Close();17十二月2023VisualC#2008程序设计9.4文件的读写
FileStreamfs2=newFileStream("c:\\bytefile.bin",FileMode.Open);byte[]data2=newbyte[fs2.Length];longn=fs2.Read(data2,0,(int)fs2.Length);//n为所读字节数
fs2.Close();Console.WriteLine("文件内容如下:");foreach(bytemindata2)Console.Write("{0},",m);FileStreamfs3=newFileStream("c:\\bytefile.bin",FileMode.Open);//文件读写位置移到从文件尾部向前4个字节
fs3.Seek(-4,SeekOrigin.End);Console.WriteLine("读写位置:{0},能定位:{1}",fs3.Position,fs3.CanSeek);byte[]data3=newbyte[1];longn2=fs3.Read(data3,0,1);Console.WriteLine("读到的数据为{0}",data3[0]);Console.WriteLine("能读:{0},能写:{1}",fs3.CanRead,fs3.CanWrite);fs3.Close();}//不再使用的流对象必须关闭
}}17十二月2023VisualC#2008程序设计9.4文件的读写【例9-6】使用了StreamReader和StreamWriter类,先写字符串到文件,再从中读取出来。//Ch09_06.csusingSystem;usingSystem.Collections.Generic;usingSystem.Te
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 贲门癌术后随访计划
- 2025年广东深圳南山第二外国语学校初三二模历史试题含答案
- 2024-2025学年度医院三基考试考试综合练习附参考答案详解(黄金题型)
- 2024-2025学年度云南理工职业学院单招数学自我提分评估带答案详解(轻巧夺冠)
- 2024-2025学年度注册电气工程师模拟题库及完整答案详解(历年真题)
- 2024-2025学年反射疗法师3级考前冲刺试卷及1套参考答案详解
- 2024-2025学年制冷与空调作业检测卷含答案详解【完整版】
- 2024-2025学年度专升本通关考试题库含答案详解(综合题)
- 2024-2025学年度公务员(国考)考试历年机考真题集带答案详解(精练)
- 2024-2025学年全国统考教师资格考试《教育教学知识与能力(小学)》能力提升B卷题库带答案详解(夺分金卷)
- 2026年小学奥数脑力测试题及答案
- 2026年世界肾脏日主题“人人享有肾脏健康:关爱生命守护地球”宣传全文
- 西昌市2026年面向全国公开考调在编在职教师(30人)考试参考题库及答案解析
- 2025年度中国邮政集团有限公司安徽省分公司春季招聘笔试参考题库附带答案详解
- 2025年通辽职业学院单招综合素质考试试题及答案解析
- 干砌石护坡施工方案
- 2026北京东城区初三(上)期末数学试题含答案
- 儿科新入职护士考核制度
- 酒吧股东合作协议范本
- 2025年秋季学期期末考试学科质量分析报告与后续教学改进策略建议书
- 10KV架空线路安全施工方案
评论
0/150
提交评论