C#第10章 文件操作2H_第1页
C#第10章 文件操作2H_第2页
C#第10章 文件操作2H_第3页
C#第10章 文件操作2H_第4页
C#第10章 文件操作2H_第5页
已阅读5页,还剩19页未读 继续免费阅读

下载本文档

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

文档简介

高级编程技术

—VisualC#.NETProgramming聊城大学•

理工学院曹银杰caoyinjie@/zh-cn/library/default.aspx第十章文件操作§10.1文件操作概念§10.2目录管理§10.3文件管理-File类§10.4文本文件读写§10.5二进制文件读写§10.6内存流操作MemoryStream§10.1文件操作概念文件File:是一些具有永久存储及特定顺序的字节组成的一个有序的、具有名称的集合。文件的三种分类方法:(1)按内容分分为文本文件与二进制文件;(2)按存取方式分为顺序文件与随机文件;(3)按输出方式分磁盘文件与设备文件(如打印机)。文件管理是操作系统的一个重要组成部分,而文件操作就是用户在编写应用程序时进行文件管理的一种手段。关于文件常会想到磁盘、路径、文件名等。在DOS、Windows操作系统中的FAT、FAT32、NTFS等文件系统,在操作系统内部实现时有不同的方式,但它们提供给用户的接口是一致的,因此在编写对文件操作的代码时不需要考虑具体的实现方式,只需要利用语言环境提供的外部接口即可。文件操作概念C#提供了强大的文件操作功能,利用.NET环境所提供的功能实现文件的存储管理、读写等各种操作。文件是存储在存储介质上的数据集,是静态的,它具有名称和相应的路径。当打开一个文件并对其进行读写时,该文件就成为动态的流(stream)。流提供一种向后备存储写入或读取字节的一种方式,除了和磁盘文件直接相关的文件流以外,流有多种类型,流可以分布在网络中、内存中、键盘输入、文本显示或者是磁带中。流是进行数据读取操作的基本对象。流为用户提供了连续的字节流存储空间,虽然数据实际存储的位置可以不连续甚至可以分布在多个磁盘上,但人们看到的是封装以后的数据结构,是连续的字节流抽象结构。文件操作概念在.NETFramework中,System.IO命名空间主要包含基于文件(和基于内存)的输入输出(I/O)服务的相关基类库。System.IO提供了一个抽象类Stream,表示对所有流的抽象,既然Stream是抽象类,所有其他流的类就都必须从Stream类中继承,从而封装了操作系统和底层存储的各个细节,使程序员把注意力集中到程序的应用逻辑上来。其中FileStream类:表示文件流,按照字节方式对流进行读写,对文件的操作,实际上就是对文件流的操作。MemoryStream类:创建其支持存储区为内存的流。BufferStream类:将流添加到缓冲区,进行读、写操作。引入命名空间:usingSystem.IO;System.IO命名空间类成员System.IO命名空间枚举成员DriveType定义驱动器类型常数,包括CDRom、Fixed、Network、NoRootDirectory、Ram、Removable和Unknown。FileAccess定义用于控制对文件的读访问、写访问或读/写访问的常数。FileAttributes提供文件和目录的属性。FileMode指定操作系统打开文件的方式。FileOptions表示用于创建FileStream对象的附加选项。FileShare包含用于控制其他FileStream对象对同一文件可以具有的访问类型的常数。NotifyFilters指定要在文件或文件夹中监视的更改。SearchOption指定是搜索当前目录,还是搜索当前目录及其所有子目录。SeekOrigin提供表示流中的参考点以供进行查找的字段。WatcherChangeTypes可能会发生的文件或目录更改。§10.2目录管理Directory静态类、Path静态类的方法或DirectoryInfo类实例实现目录的创建、移动和删除等目录管理。以Directory静态类为例介绍:Directory类的CreateDirectory、Delete方法创建删除文件夹:Privatevoidbutton1_Click(objectsender,EventArgse){

//注意转义字符

\、

@用法

stringpathabc="c:\\abc";Directory.CreateDirectory(pathabc);Directory.CreateDirectory(@"c:\abc\123");Directory.Delete("c:\\abc\\123");//只能删空目录

}Directory类的方法Exists方法判断文件夹是否存在:Privatevoidbutton2_Click(objectsender,EventArgse){if(Directory.Exists("c:\\abcd")){textBox1.Text="DirectoryabcdExists!";}else{textBox1.Text="DirectoryabcdNotExists!";}

}GetCurrentDirectory方法获取当前工作目录:stringpath=Directory.GetCurrentDirectory();textBox1.Text=path;Directory类的方法Move方法,移动文件夹:Directory.CreateDirectory("c:\\abcd");Directory.Move("c:\\abcd","c:\\abc\\abcdd");GetDirectories方法,取得指定目錄中的子目錄名稱(包括路徑):string[]subdirectoryEntries=Directory.GetDirectories(targetDirectory);GetFiles方法,返回指定目录中的文件的名称:string[]fileEntries=Directory.GetFiles(targetDirectory);§10.3文件管理-File类File类提供了一系列静态方法对文件进行文件的创建、复制、删除、移动和打开、读写等操作。也可以用FileInfo类实例方法进行文件管理。以下是File类的方法为例:Create方法创建文件:privatevoidbutton1_Click(objectsender,EventArgse){Directory.CreateDirectory("c:\\abcd");File.Create("c:\\abcd\\abc.txt");

}//文件创建后也就打开了Delete方法删除未打开的文件:

File.Delete("c:\\abcd\\abc.txt");Open方法打开指定路径上的文件,有读/写方式(追加、覆盖等)、访问权限、共享可选项,选项都是枚举常量。语法:File.Open(String,FileMode,FileAccess,FileShare)

例:

File.Open("c:\\abcd\\abc.txt",FileMode.Create,

FileAccess.ReadWrite,

FileShare.Read);

文件管理Copy方法复制文件(同时可改名):File.Copy(sourceFileName,destFileName,booloverwrite);例:File.Copy(@"c:\abcd\\abc.txt","c:\\abc2.txt",true);Move方法移动文件(同时可改名):File.Move(sourceFileName,destFileName);Exists方法判断文件是否存在避免程序出错:语法:File.Exists(stringpath);

if(!File.Exists("c:\\abc2.txt")){File.Copy(@"c:\abcd\abc.txt","c:\\abc2.txt");}§10.4文本文件读写File类除了文件管理功能也提供了丰富的文本文件的静态类读写方法,不需要实例化即可以调用File方法。FileStream类、StreamWriter与StreamReader类提供了按文本读写数据的实例化方法,也具有文件管理方法。读写文本文件方法很多,参见MSDN。以File静态类的方法读写文本文件:1、字符串读写或追加到文本文件2、字符串数组读写到文本文件3、字节数组读写到文本文件以StreamWriter与StreamReader类实例化对象,以行为单位读写文本文件:4、以行为单位读写到文本文件1、字符串读写或追加到文本文件File.WriteAllText(String,String,Encoding)方法:创建或覆盖一个文件,写入字符串,然后关闭文件。stringpath=@"c:\MyTest.txt";File.WriteAllText(path,"

你好!",

Encoding.UTF8);File.AppendAllText(String,String,Encoding)方法:字符串追加到文件中。stringcreateText="hello!"+Environment.NewLine;File.AppendAllText(path,createText);File.ReadAllText(String,Encoding)方法:打开一个文件,使用指定的编码读取文件的所有行,然后关闭该文件。stringpath=@"c:\MyTest.txt";stringreadText=File.ReadAllText(path,Encoding.UTF8);textBox1.Text=readText;2、字符串数组读写到文本文件File.WriteAllLines方法(String,String[],Encoding)方法:创建或覆盖一个文件,写入字符串数组,然后关闭文件。stringpath=@"c:\MyTest.txt";string[]createText={"Hello","And","Welcome"};File.WriteAllLines(path,createText,Encoding.UTF8);File.ReadAllLines(String,Encoding)方法:打开一个文本文件,将文件的所有行都读入一个字符串数组,后关闭文件。

stringpath=@"c:\MyTest.txt";string[]readText=File.ReadAllLines(path,Encoding.UTF8);

//textBox1.Text=readText[1];foreach(stringsinreadText){

textBox1.Text+=s;

}3、字节数组读写到文本文件File.WriteAllBytes(String,byte[])方法:创建或覆盖一个文件,写字节数组(ASCII码),然后关闭该文件。stringpath=@"c:\MyTest.txt";byte[]createText={65,66,97,98};File.WriteAllBytes(path,createText);

File.ReadAllBytes(path)

方法:打开文件,以字节形式都读入一个字节数组,然后关闭该文件。stringpath=@"c:\MyTest.txt";byte[]readText=File.ReadAllBytes(path);foreach(bytesinreadText){textBox1.Text+=s;}4、以行为单位读写到文本文件StreamWriter.WriteLine(String)方法:向当前流中写一行字符。privatevoidbutton1_Click(objectsender,EventArgse){stringFILE_NAME=@"c:\MyTest.txt";using(StreamWritersw=newStreamWriter(FILE_NAME)){sw.WriteLine("以行为单位");sw.WriteLine("读写到文本文件");sw.WriteLine("你看,共三行")}//注意using用法,sw对象初始化时写的参数。

}StreamReader.ReadLine()方法:从当前流中读取一行字符作为字符串返回。privatevoidbutton2_Click(objectsender,EventArgse){stringFILE_NAME=@"c:\MyTest.txt";

StreamReadersr=newStreamReader(FILE_NAME))

while(sr.Peek()>=0){textBox1.Text+=sr.ReadLine()+Environment.NewLine;}

sr.Close();

}§10.5二进制文件读写BinaryWriter和BinaryReader类用于实例化的方法读取和写入二进制数据。这两个对象都先需要FileStream创建流。文件指针:文件打开后会产生一个指针,指向文件头;随着数据读写,它自动指向下一次要读写的数据位置,通过指令也可改变指针位置。BinaryWriter常用方法:Close关闭当前的BinaryWriter和基础流。Equals

确定两个Object实例是否相等。Flush清理当前编写器的所有缓冲区,使所有缓冲数据写入基础设备。GetType

获取当前实例的Type。Seek设置当前流中的位置。ToString

返回表示当前Object的String。Write已重载。将值写入当前流。二进制文件读写举例BinaryWriter向空文件流(MyTest.data)写入数据步骤:用FileStream创建c:\MyTest.dat文件的流对象fstream

;用BinaryWriter以流fstream为参数实例化www流;www.Write方法将整数0到10值写入当前流。BinaryWriter每次写入都将文件指针置于文件尾。privatevoidbutton1_Click(objectsender,EventArgse)

{stringFILE_NAME=@"c:\MyTest.dat";

FileStreamfstream=newFileStream(FILE_NAME,FileMode.Create);BinaryWriterwww=newBinaryWriter(fstream);for(inti=0;i<11;i++){www.Write((int)i);}//www.Seek(32,SeekOrigin.Begin);//改变指针位置

//www.Write(888);www.Close();fstream.Close();}二进制文件读写举例BinaryReader读二进制文件步骤:用FileStream创建c:\MyTest.dat文件的流对象fstream

;用BinaryReader以流fstream为参数实例化rrr流;rrr.ReadInt32()

方法从当前流中读取4字节无符号整数并使流的当前指针位置加4个字节。每次写入都将文件指针置于文件尾。Close()Read()ReadDecimal()ReadByte()ReadInt16()ReadInt32()ReadString()BinaryReaderBinaryReader读二进制文件privatevoidbutton2_Click(objectsender,EventArgse){stringFILE_NAME=@"c:\MyTest.dat";FileStreamfstream=newFileStream(FILE_NAME,FileMode.Open,FileAccess.Read);BinaryReaderrrr=newBinaryReader(fstream);for(inti=0;i<11;i++){textBox1.Text+=rrr.ReadInt32();}

温馨提示

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

评论

0/150

提交评论