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());
}

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

  • 5
    点赞
  • 27
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值