浩瀚

C# IO文件流

C#读写文件步骤:

创建文件流
创建阅读器或者写入器
执行读写操作
关闭阅读器或者写入器
关闭文件流

在进行文件操作之前需要导入using System.IO;命名空间

示例代码

创建文件流

FileStream myfs = new FileStream(Path,FileMode.Create);

创建写入器

StreamWriter mySw = new StreamWriter(myfs);

将内容写入文件

mySw.Write(“text”);

关闭写入器

mySw.Close();

关闭文件流

Myfs.Close();

创建文件流

读写文件的第一步是创建一个文件流。流是一个用于数据传输的对象。
上面的代码中使用的文件流是FileStream类,它主要用于读写文件中的数据

FileStream语法

FileStream myfs = new FileStream(string filePath,FileMode fileMode);

filePath:指定要操作的文件
fileMode指定打开文件的模式,是一个枚举类型:

Create:用指定的名称创建一个文件,如果文件存在则改写旧文件
CreateNew:新建一个文件,如果文件存在会发生异常,提示文件已存在
Open:打开一个文件。使用这个枚举时指定的文件必须存在,否则报错
OpenOrCreate:这个和Open成员相似,只是若果文件不存在,则用指定的名称创建一个文件并打开它
Append:打开现有的文件,并在文件末尾追加内容
。。。。。。

文件读写器

StreamWriter写入器

StreamWriter类称为写入器,用于讲数据写入文件流
创建好写入器后可以调用它的方法将要写入的内容写入文件流
StreamWriter.Write();写入流
StreamWriter.WriteLine();用于写入一行数据,某些数据后换行
StreamWriter.Close();关闭写入器

StreamReader读取器

StreamReader用于读取流中的数据,它主要包含以下几个用法
StreamReader.ReadLine();读取文件流中的一行数据,并返回字符串
StreamReader.ReadToEnd();从当前位置读到末尾,返回字符串
StreamReader.Close();关闭读取器

解决乱码问题

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

StreamReader sr = new StreamReader(fs,Encoding.Default);

Encoding.UTF8:获取UTF-8格式编码
Encoding.Default:获取操作系统当前的编码
也可以通过Encoding类的静态方法GetEncoding(string name)指定字符编码,参数name必须是c#支持的编码名。例如:

StreamReader sr = new StreamReader(fs,Encoding.GetEncoding(“GB2312”));

File类和Directioy类

File类的常用方法

返回值类型方法名称说明
boolExists(string path)用于检查指定文件是否存在
voidCopy(string sourceFilePath,string destinationFilePath)将指定路径的源文件中的内容复制到目标文件中,如果目标文件不存在,则在指定路径新建一个文件
voidMove(stringsourceFileName,string destFileName)将指定文件移到一个新的路径
voidDelete(string path)删除指定的文件如果指定的文件不存在不会引发异常

调用示例

File.方法名(参数列表);

Directioy类的常用方法

返回值类型方法名称说明
BoolExists(string path)用于检查指定文件夹在磁盘上是否存在
voidMove(stringsourceFileName,string destFileName)将文件或目录及其内容移到新的位置
voidDelete(string path,bool recursive)删除制定目录,如果recursive为true则删除子目录中的所有目录内容

实例方法的文件和目录操作

FileInfo和File类以及DirectoryInfo类和Directory类的功能类似,都可以完成对文件的复制移动删除等操作,不同的是使用FileInfo和DirectoryInfo必须要实例化对象

FIleInfo的属性和方法

属性说明
Exists用于检查指定文件是否存在,返回一个bool
Extension获取表示文件扩展名部分的字符串
Name获取文件名
FullName获取目录或者文件的完整目录
返回值类型方法说明
FileInfoCopyTo(string)将现有文件复制到新文件,不允许覆盖现有文件
voidDelete()永久删除文件
voidMoveTo(string)将指定文件移到新的位置(string)

实例代码

FileInfo fi = new FileInfo(@"D:\temp\my.txt");
Console.WriteLine("文件是否存在"+fi.Exists);
Console.WriteLine("文件名"+fi.Name);
Console.WriteLine("文件目录名"+fi.Directory.Name);
fi.CopyTo(@"D:\test\my.txt");

获取当前目录文件列表

DirectoryInfo di = new DirectoryInfo("E:\\");
FileInfo[] fi = di.GetFiles();
foreach ( FileInfo item in fi )
{
    Console.WriteLine(item.FullName);
}

获取当前目录列表

DirectoryInfo di = new DirectoryInfo("E:\\");
DirectoryInfo[] dis = di.GetDirectories();
foreach ( DirectoryInfo item in dis )
{
    Console.WriteLine(item.FullName);
}

这里我们使用了DirectoryInfo类的两个重要的方法。
GetDirectories()该方法返回当前目录的子目录对象数组,DIrectory类也有这个方法,但是返回值是当前目录的子目录的名称数组
GetFiles()该方法返回当前目录下的文件列表(FileInfo对象数组)Directory类也有这个方法,但是返回值是返回指定目录下的文件名数组。