C# 数据流的读取操作

C# 数据流的读取操作

数据流一般具有读写操作。
1、读(Read)操作:读出流对象中的数据,并把它存放到另一个数据结构中。
2、写(Write)操作:从另一种数据结构中读取数据并存放到流对象中。

1、所有文件类型的读取和写入

文件流(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("复制完成.");

2、文本文件的读取和写入

对于文本文件,通常采用以下两个类进行处理。
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("写入完成.");

3、二进制文件的读取和写入

对于二进制文件,通常采用下面两个类进行处理。
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());
}

因为作者精力有限,文章中难免出现一些错漏,敬请广大专家和网友批评、指正。

你可能感兴趣的:(C#知识模块,c#,开发语言,.netcore,visual,studio)