数据流一般具有读写操作。
1、读(Read)操作:读出流对象中的数据,并把它存放到另一个数据结构中。
2、写(Write)操作:从另一种数据结构中读取数据并存放到流对象中。
文件流(FileStream)类,是用来实现对文件的读取和写入的。
FileStream类的构造有多种形式,最常用的一种如下所示:
public FileStream(string path, FileMode mode, FileAccess access);
其中,path表示将要操作的文件路径,而参数mode和access都是一个枚举值。
FileMode类的枚举成员:
枚举值 | 文件存在说明 | 文件不存在说明 |
---|---|---|
Append | 打开并定位结尾 | 创建新文件 |
Create | 改写文件 | 创建新文件 |
CreateNew | 异常 | 创建新文件 |
Open | 打开文件 | 异常 |
OpenOrCreate | 打开文件 | 创建新文件 |
Truncate | 将文件截断到0字节 | 异常 |
FileAccess类的枚举成员:
枚举值 | 说明 |
---|---|
Read | 只读模式 |
Write | 只写模式 |
ReadWrite | 读写模式 |
复制C#入门基础.pdf文件案例:
string path = @"C:\Users\Administrator\Desktop\C#入门基础.pdf";
string copyPath = @"C:\Users\Administrator\Desktop\C#入土教程.pdf";
FileStream fsRead = new FileStream(path, FileMode.OpenOrCreate, FileAccess.Read);
FileStream fsWriter = new FileStream(copyPath, FileMode.OpenOrCreate, FileAccess.Write);
while (true)
{
byte[] buffer = new byte[1024 * 1024 * 5];//一次读取5M内容
int r = fsRead.Read(buffer, 0, buffer.Length);//实际读取的有效字节数
if (r == 0)//读到最后内容
{
break;
}
//以ANSI默认格式读取文本内容
//string tempStr = Encoding.Default.GetString(buffer, 0, r);
//Console.WriteLine(tempStr);
fsWriter.Write(buffer, 0, r);
}
//关闭流
fsWriter.Close();
//释放流占用的资源
fsWriter.Dispose();
//关闭流
fsRead.Close();
//释放流占用的资源
fsRead.Dispose();
Console.WriteLine("复制完成.");
C#采用【using】来自动关闭流并释放流占用的资源。
string path = @"C:\Users\Administrator\Desktop\C#入门基础.pdf";
string copyPath = @"C:\Users\Administrator\Desktop\C#入土教程.pdf";
//将创建文件流对象的过程写在using当中,会自动关闭流并释放流占用的资源
using (FileStream fsRead = new FileStream(path, FileMode.OpenOrCreate, FileAccess.Read))
{
using (FileStream fsWrite = new FileStream(copyPath, FileMode.OpenOrCreate, FileAccess.Write))
{
while(true)
{
byte[] buffer = new byte[1024 * 1024 * 5];
int r = fsRead.Read(buffer, 0, buffer.Length);
if(r == 0)
{
break;
}
fsWrite.Write(buffer, 0, r);
}
}
}
Console.WriteLine("复制完成.");
对于文本文件,通常采用以下两个类进行处理。
StreamReader类,可以直接读取文本文件的内容。
StreamWriter类,允许直接将字符和字符串写入文件,因此一般用来对文本文件的写入。
StreamRead读取文本文件:
string path = @"C:\Users\Administrator\Desktop\a.txt";
//采用默认ANSI编码格式进行读取
using (StreamReader sr = new StreamReader(path, Encoding.Default))
{
//在读取末端进行判断,并循环读取
while (!sr.EndOfStream)
{
//输出每一行读取的内容
Console.WriteLine(sr.ReadLine());
}
}
StreamWriter写入文本文件:
string path = @"C:\Users\Administrator\Desktop\a.txt";
//第二参数:默认false,可以不写,表示覆盖内容。true表示为文件追加内容
using (StreamWriter sw = new StreamWriter(path, true))
{
sw.Write("追加内容");
sw.WriteLine("追加内容");
}
Console.WriteLine("写入完成.");
对于二进制文件,通常采用下面两个类进行处理。
BinaryReader类,用于二进制文件的读取,且处理的必须是二进制文件。
BinaryWriter类,用于二进制文件的写入。写入的文件可以不是二进制文件。
BinaryReader读取二进制文件:
string path = @"C:\Users\Administrator\Desktop\a.txt";
using (BinaryWriter bw = new BinaryWriter(new FileStream(path, FileMode.OpenOrCreate)))
{
bw.Write("写入内容.");
}
Console.WriteLine("写入成功");
BinaryWriter写入文件:
string path = @"C:\Users\Administrator\Desktop\a.txt";
using (BinaryReader br = new BinaryReader(new FileStream(path, FileMode.OpenOrCreate)))
{
Console.WriteLine(br.ReadString());
}
因为作者精力有限,文章中难免出现一些错漏,敬请广大专家和网友批评、指正。