【小白专用】c#之FileStream对象读写大文件

提及文件流,不得不先说以下几个类
FileStream,MemoryStream,NetWorkStream,StreamReader,StreamWriter,TextReader,TextWriter
在用这些类之前,我们先来了解一下这些类的用途以及区别。

C# 中常用的文件流(FileStream、StreamReader/Writer、MemoryStream)_c# filestream和streamwriter-CSDN博客

读取数据:

FileStream fs = new FileStream(path,FileMode.Open);    //初始化文件流
byte[] arr = new byte[fs.Length];                      //初始化字节数组
fs.Read(arr, 0, arr.Length);                           //从流中数据读取到字节数组中
fs.Close();                                            //关闭流
string str = Encoding.UTF8.GetString(arr);             //将字节数组转换为字符串
Console.WriteLine(str);

写入数据

FileStream fs = new FileStream(path,FileMode.Append);  //初始化文件流
byte[] arr = Encoding.UTF8.GetBytes("程序人生道可道");   //将字符串转换为字节数组
fs.Write(arr,0,arr.Length);                            //将字节数组写入文件流
fs.Close(); 

二:StreamReader/StreamWriter类

用途:主要用来处理流数据,它们分别提供了高效的流读取/写入功能。
优点:可以直接用字符串进行读写,而不用转换成字节数组。
注意:对于文本文件的读写,通常用 StreamReader 类和 StreamWriter 类更方便,其底层是通过FileStream实现读写文本文件。

读取数据:
 

FileStream fs = new FileStream(path,FileMode.Open);  //初始化文件流
StreamReader sr = new StreamReader(fs);              //初始化StreamReader
string line = sr.ReadLine();                         //直接读取一行
string line = sr.ReadToEnd()                         //读取全文
sr.Close();                                          //关闭流
fs.Close();                                          //关闭流
Console.WriteLine(line);

经试验:读取数据时 sr 和 fs 关闭的顺序颠倒同样可以读取到数据,考虑代码规范,常规写法就行。

写入数据:

FileStream fs = new FileStream(path,FileMode.Append); //初始化文件流
StreamWriter sw = new StreamWriter(fs);               //初始化StreamWriter
sw.WriteLine("程序人生道可道");                         //写入一行数据
sw.Close();                                           //关闭流
fs.Close();                                           //关闭流

经试验:写入数据时 fs 一定要在 sw 后面关闭,否则会抛出异常(因为你在写入数据之前,你已经把文件流给关闭了,肯定写不进去数据了)

“` 
using System; 
using System.Collections.Generic; 
using System.IO; 
using System.Reflection; 
using System.Text;

namespace IO目录管理 
{ 
class Program 
{ 
private string _StrSourcePath = @”E:\TestDir\Test\1.txt”; //源文件目录 
private string _StrTagrgetPath = @”F:\TestDir\Test\1.txt”; //目标文件目录

 public void Test()
  {
    //路径合法性判断
    if(File.Exists(_StrSourcePath))
    {
      //构造读取文件流对象
      using (FileStream fsRead = new FileStream(_StrSourcePath, FileMode.Open)) //打开文件,不能创建新的
      {
        //构建写文件流对象
        using (FileStream fsWrite = new FileStream(_StrTagrgetPath,FileMode.Create)) //没有找到就创建
        {
          //开辟临时缓存内存
          byte[] byteArrayRead = new byte[1024 * 1024]; // 1字节*1024 = 1k 1k*1024 = 1M内存

          //通过死缓存去读文本中的内容
          while(true)
          {
            //readCount 这个是保存真正读取到的字节数
            int readCount = fsRead.Read(byteArrayRead, 0, byteArrayRead.Length);

            //开始写入读取到缓存内存中的数据到目标文本文件中
            fsWrite.Write(byteArrayRead, 0, readCount);


            //既然是死循环 那么什么时候我们停止读取文本内容 我们知道文本最后一行的大小肯定是小于缓存内存大小的
            if(readCount < byteArrayRead.Length)
            {
              break; //结束循环
            }
          }
        }
      }
    }
    else
    {
      Console.WriteLine("源路径或者目标路径不存在。");
    }
  }


  static void Main(string[] args)
  {
    Program p = new Program();
    p.Test();

  }
}

}

相关推荐

  1. 专用c#FileStream对象文件

    2024-01-02 13:30:04       57 阅读
  2. C# —— FileStream文件

    2024-01-02 13:30:04       24 阅读
  3. c++的文件

    2024-01-02 13:30:04       58 阅读
  4. C++的文件

    2024-01-02 13:30:04       70 阅读
  5. C++BMP文件

    2024-01-02 13:30:04       37 阅读
  6. C语言】文件

    2024-01-02 13:30:04       52 阅读
  7. C++二进制文件

    2024-01-02 13:30:04       33 阅读
  8. C# —— File文件

    2024-01-02 13:30:04       28 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-01-02 13:30:04       98 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-01-02 13:30:04       106 阅读
  3. 在Django里面运行非项目文件

    2024-01-02 13:30:04       87 阅读
  4. Python语言-面向对象

    2024-01-02 13:30:04       96 阅读

热门阅读

  1. PyTorch中常用的工具(5)使用GPU加速:CUDA

    2024-01-02 13:30:04       52 阅读
  2. Hive07_多表查询

    2024-01-02 13:30:04       53 阅读
  3. C ++类

    C ++类

    2024-01-02 13:30:04      66 阅读
  4. 【C语言】动态内存管理详解

    2024-01-02 13:30:04       46 阅读
  5. 前端Vue日常工作中--Vue路由相关

    2024-01-02 13:30:04       48 阅读
  6. SpringBoot 中获取 Request 的四种方法

    2024-01-02 13:30:04       64 阅读
  7. C++ 值传递、引用传递、指针传递

    2024-01-02 13:30:04       54 阅读
  8. 【拼题A】2024跨年挑战赛

    2024-01-02 13:30:04       44 阅读
  9. 14、应用层优化

    2024-01-02 13:30:04       51 阅读
  10. 【DOCKER】详细介绍以及如何创建管理DOCKER

    2024-01-02 13:30:04       55 阅读
  11. Docker

    Docker

    2024-01-02 13:30:04      66 阅读