C# 之 对文本文件读写相关

2020-12-21 17:53发布

C# 之 对文本文件读写相关


Path类

我们不能去实例化Path类,Path类提供了一些静态方法,可以更容易的对路径名执行操作。

Console.WriteLine(Path.Combine(@"c:\my documents","Readme.txt"));

在不同的操作系统上,路径的表示是不一样的 windows上是 \ , 在Unix就是/ ,我们可以使用Path.Combine连接两个路径,不用关心在哪个系统上。

Path类的一些静态字段

字段名说明
AltDirectorySeparatorChar提供分割目录的字符,在windows上使用 \ 在Unix上用 /
DirectorySpeparatorChar提供分割目录的字符,在windows上使用 / 在Unix上用 \
PathSeparator提供一种与平台无关的方式,来指定划分环境变量的路径字符串,默认为分号
VolumeSepartorChar提供一种与平台无关的方式,来指定容量分割符,默认为冒号


文件相关类

1,通过FileInfoDirectoryInfo类来读取文件和文件夹属性
作用:查看文件属性,创建文件,移动文件,重命名文件, 判断路径是否存在,创建目录

2,通过File读写文件
作用:读写文件

3,使用流来读写文件
FileStream
StreamReader(读取流-读取数据)
StreamWriter(写入流-向别人传输)


FileStream(文件流):

FileStream(文件流) 这个类主要用于二进制文件中读写,也可以使用它读写任何文件。

StreamReader(流读取器)和StreamWriter(流写入器)专门用于读写文本文件

使用FileStream读写二进制文件
FileStream实例用于读写文件中的数据,要构造FileStream实例,需要提供下面的4中信息:

  1. 要访问的文件 - 一般提供一个文件的完整路径名

  2. 表示如何打开文件的模式 - 新建文件或打开一个现有文件,如果打开一个现有的文件,写入操作是覆盖文件原来的内容,还是追加到文件的末尾?

  3. 表示访问文件的方式 - 只读 只写 还是读写

  4. 共享访问 - 表示是否独占访问文件,如果允许其他流同时访问文件,则这些流是只读 只写 还是读写文件


构造函数的参数:
构造函数的参数的取值

  • FileMode( 打开模式) Append,Create,CreateNew,Open,OpenOrCreate和Truncate

  • FileAccess(读取还是写入) Read,ReadWrite和Write

  • FileShare(文件共享设置) Delete,Inheritable,None,Read,ReadWrite和Write

PS:
如果文件不存在 Append Open和Truncate会抛出异常, 如果文件存在 CreateNew会抛出异常; Create 和 OpenOrCreate Create会删除现有的文件,新建一个空的文件,OpenOrCreate会判断当前是否有文件,没有的话才会创建;

PS:
当我们使用完了一个流之后,一定要调用fs.Close();方法去关闭流,关闭流会释放与它相关联的资源,允许其他应用程序为同一个文件设置流。这个操作也会刷新缓冲区。


读写文本流

我们对文本文件的读写一般使用StreamReader和StreamWriter,因为不同的文本有不同的编码格式,这个StreamReader会帮我们自动处理,所以我们不需要关心文本文件的编码是什么

  1. 创建文本的读取流(会检查字节码标记确定编码格式)

StreamReader sr = new StreamReader(@"c:\xx\Read.txt");

  1. 指定编码格式

StreamReader str = new StreamReader(@"c:\xx\xx.txt",Encoding.UTF8);

(可取的编码格式 ASCII Unicode UTF7 UTF8 UTF32)

  1. 在文件流的基础上创建文本读取流

FileStream fs = new FileStream(@"c:\xx\xx.txt",FileMode.Open,FileAccess.Read,FileShare.None);

StreamReader sr = new StreamReader(fs);FileStream fs = new FileStream(@"c:\xx\xx.txt",FileMode.Open,FileAccess.Read,FileShare.None);

StreamReader sr = new StreamReader(fs);

  1. 通过文件信息创建文本读取流-第二种方式

FileInfo myFile = new FileInfo(@"c:\xx\xx.txt");

StreamReader sr = myFile.OpenText();

sr.Close();

StreamWriter的创建

1,(默认使用UTF-8编码)

StreamWriter sw = new StreamWriter(@"c:\xx\xx.txt");

2, 第二个参数表示是否以追加的方式打开

StreamWriter sw = new StreamWriter(@"c:\xx\xx.txt",true,Encoding.ASCII)

3,通过FileStream创建StreamWriter

FileStream fs = new FileStream(@"c:\xx\xx.txt",FileMode.CreateNew,FileAccess.Write,FileShare.Read);

StreamWriter sw = new StreamWriter(fs);

4,通过FileInfo创建StreamWriter

FileInfo myFile = new FileInfo(@"c:\xx\xx.txt");

StreamWriter sw = myFile.CreateText();

sw.Close(); //所有流用完之后关闭 


写入流的三种写入方式:

1,写入一行字符

string nextLine = "x xx x x x x ";sw.Write(nextLine);

2,写入一个字符

char nextChar = 'a';

sw.Write(nextChar);

3,写入字符数组

char[] charArray = new char[]{'a','b'};

sw.Write(charArray);

4,写入字符数组的一部分

//参数: charArray:要写入的数组; StartIndexv:开始索引; Length写入长度

sw.Write(charArray,StartIndex,Length);




作者:Czhenya

链接:https://czhenya.blog.csdn.net/article/details/78241072

来源:CSDN
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。