您的位置:首页 > 编程语言 > C#

C#学习笔记:文件操作

2012-05-13 15:04 211 查看
C#学习笔记:文件操作

如何读写文件:

通常来讲,用C#程序读写一个文件需要以下五个基本步骤

(1)创建文件流。

(2)创建阅读器或者写入器

(3)执行读写操作

(4)关闭阅读器或者写入器

(5)关闭文件流

需要命名空间:using System.IO;

读取器:

//创建文件流

FileStream myfs = new FileStream("路径", FileMode.Open);

//创建读取器,传入的是文件流

StreamReader mysw = new StreamReader(myfs);

//读取全部内容,返回值为String

mysw.ReadToEnd();

//关闭读取器

mysw.Close();

//关闭文件流

myfs.Close();

写入器:

//创建文件流

FileStream myfs = new FileStream("路径", FileMode.Create);

//创建读取器,传入的是文件流

StreamReader mysw = new StreamReader(myfs);

//将录入的内容写入文件,将会保存到myfs里面的路径下的文件里面

mysw.Write("文本值");

//关闭写入器

mysw.Close();

//关闭文件流

myfs.Close();

关闭顺序一定要注意,先是关闭读写器然后才关闭文件流。顺序不能错!

-----------------------------------文件流-----------------------------------

读写文件的第一步是创建一个文件流。流是一个用于数据传输的对象。这里使用的文件流是FileStream类,它主要用于读写文件中的数据,在创建一个文件流时,需要在它的构造函数中指定参数

语法:

FileStream 文件对象 = new FileStream(string FilePath,FileMode);

其中FilePath用于指定要操作的文件,而FileMode指定打开文件的模式,它是一个枚举类型。该枚举的不同成员如下

Create:用于定的名称新建一个文件。如果文件存在,则改写旧文件。

CreateNew:新建一个文件。如果文件存在就会发生异常,提示文件已经存在。

Open:打开一个文件,使用这个枚举值时,指定的文件必须存在,否则会发生异常



OpenOrCreate:OpenOrCreate与Open成员类似,只是如果文件不存在,则用指定的名称新建一个文件并打开它。

Append:打开现有文件,并在文件尾追加内容。

FileMode枚举还有其他成员,在这里我们就不再做列举

路径非法问题:

C#程序内部不支持"C:\Text.txt"。

解决方案:

(1)将路径改为"C:\\Text.txt"。这是C#支持的标准写法

(2)@"C:\Text.txt",使用转义符@

---------------------------------文件读写器---------------------------------

StreamWriter写入器

写入器的主要方法如下:

StreamWriter.Write();用于写入流,这个流就是我们创建好的流

StreamWriter.WriteLine();用于写入一行数据,写入某些数据后跟换行符

StreamWriter.Close();用于关闭写入器

StreamReader读取器

读取器的主要方法如下:

StreamReader.ReadToEnd();从当前位置读到末尾,返回字符串

StreamReader.ReadLine();用于读取文件流中的一行数据,返回字符串

StreamReader.Close();用于关闭读取器

--------------------------------- 乱码问题 ---------------------------------

Encoding类指定字符编码。Encoding类位于System.Text命名空间,用来表示字符编码。

可以用Encoding类的静态成员指定编码格式。比如:

Encoding.UTF8:获取UTF-8格式的编码

Encoding.Default:获取操作系统的当前编码

也可以通过Encoding类的静态方法GetEncoding(String name)指定字符编码,参数name必须C#支持的编码名。例如:

StreamReader mysw = new StreamReader(myfs,Encoding.GetEncoding("BIG5"));

以下是各种常见的编码:

(1)ASCII:美国信息交换标准码。适用于纯英文环境,但不适合英语之外的环境

(2)ANSI:向下兼容ASCII,并且保留空余位置处理一些特殊字符。

(3)GB2313:中国国家标准的汉字编码,它收录的汉字基本满足汉字的计算机处理需求。但不支持繁体中文编码,后来又增加了GBK字符集、BIG5字符集。

(4)Unicode:国际组织制定的可以容纳世界上所有文字和符号的字符编码方案。由于Unicode编码所占用的空间较大,所以出现了一些中间格式的字符集,它们被称为通用转换格式,即UTF(Universal Transformation Format)。目前存在的UTF格式有UTF-7、UTF-8、UTF-16、UTF-32。UTF-8是Unicode的一种变长字符编码,现在已被标准化为RFC 3629。UTF-8便于不同的计算机之间使用网络传输不同语言和编码的文字,使得双字节的Unicode能够在现存的处理单字节的系统上正确传输。C#语言内容默认支持UTF-8编码。

------------------------------ 文件和目录操作 ------------------------------

File类:用来移动文件,复制文件,删除文件

File类的常用方法

方法 说明

Exists(string path) 用于检查指定文件是否存在,返回bool值

Copy(string path,string path) 将指定路径的源文件中的内容复制到目标文件中,
如果目标文件不存在,则在指定路径新建一个文件

Move(string path,string path) 将指定文件移到一个新的路径

Delete(string path) 删除指定文件,如果指定文件不存在,不引发异常

Directory类:Directory类是用来对文件夹进行操作的

Directory类的常用方法

方法 说明

Exists(string path) 用于检查指定文件夹在磁盘上是否存在

Move(string path,string path) 用于将文件或目录及内容移到新位置

Delete(string path) 删除指定目录,如果bool值为true,则删除子目录
中的所有目录内容

File类和Directory类都属于静态类,不需要实例化

FileInfo类:FileInfo类和File类的功能相似,但是需要实例化。

FileInfo fi = new FileInfo(path);//实例化的时候需要将文件路径传入进去

FileInfo类的常用方法

属性 说明

Exists 用于检查指定文件是否存在,返回bool值

Extension 获取表示文件扩展名部分的字符串

Name 获取文件名

FullName 获取目录或文件的完成目录

方法 说明

CopyTo(string path) 将现有文件复制到新文件,不允许覆盖现有文件Delete()
永久删除文件

MoveTo(string path) 将指定文件移到一个新的路径

DirectoryInfo类:DirectoryInfo类与Directory类类似,需要实例化

DirectoryInfo di = new DirectoryInfo (path);//实例化的时候
需要将文件夹路径传入进去

//返回当前目录的子目录

DirectoryInfo[] subDir = di.GetDirectories();

//返回当前目录的文件列表

FileInfo[] fi = di.GetFile();

(1)GetDirectories():DirectoryInfo调用返回对象数组,Directory调用返回子目录名称数组

(2)GetFile():DirectoryInfo调用返回对象数组,Directory调用返回子目录名称数组

如何取舍FileInfo类和File类和DirectoryInfo类与Directory类?

答:File类和Directory类都是静态类,每次调用方法在使用时都会进行安全检查,所以如果要多次对某个文件或者文件夹进行操作的话,可以优先考虑FileInfo类和DirectoryInfo类

----------------------------------- 总结 -----------------------------------

(1)读写文件的五个步骤:创建文件流、创建读写器、读写文件、关闭读写器、关闭文件流。

(2)文件流的类是FileStream,创建一个文件流时,需要指定操作文本的路径、文件的打开方式和文件的访问方式。

(3)StreamWriter是一个写入器,StramReader是一个读取器。读写文本文件可以直接使用读写器,不用创建文件流,但是不容易控制文本的打开方式和访问方式

(4)File类用于对文件进行操作,如复制、移动、删除等,Directory类用于对文件夹操作,它们都是静态类。

(5)静态类只包含静态成员,非静态类可以包含静态成员;静态类不能包含实例成员,非静态类可以包含实例成员;静态类使用类名访问其成员,非静态类使用它的实例对象访问成员。

(6)FileInfo类与File类功能类似,也可以完成对文件的基本操作。不同的是File类不可以实例化对象。如果打算多次重用某个文件对象,可以优先考虑使用FileInfo类,因为并不总是需要安全检查

(7)DirectoryInfo类与Directory类功能类似,可以完成对文件夹的基本操作。如果打算多次重用某个目录对象,可以考虑使用DirectoryInfo类的实例方法。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: