C# 文件流读写方法汇总

一、官方文档:

文件和流I/O(输入/输出):

https://docs.microsoft.com/zh-cn/dotnet/standard/io/

文件流 FileStream

https://docs.microsoft.com/zh-cn/dotnet/api/system.io.filestream?view=net-5.0

文件流FileStream 官方案例:

https://docs.microsoft.com/zh-cn/dotnet/standard/io/how-to-read-and-write-to-a-newly-created-data-file

二、案例

案例一:https://www.cnblogs.com/akwwl/p/3240813.html

C#读写txt文件的两种方法介绍

 

1.添加命名空间

  System.IO;

  System.Text;

2.文件的读取

  (1).使用FileStream类进行文件的读取,并将它转换成char数组,然后输出。

复制代码
        byte[] byData = new byte[100];
        char[] charData = new char[1000];
        public void Read()
        {
            try
            {
                FileStream file = new FileStream("E:\test.txt", FileMode.Open);
                file.Seek(0, SeekOrigin.Begin);
                file.Read(byData, 0, 100); //byData传进来的字节数组,用以接受FileStream对象中的数据,第2个参数是字节数组中开始写入数据的位置,它通常是0,表示从数组的开端文件中向数组写数据,最后一个参数规定从文件读多少字符.
                Decoder d = Encoding.Default.GetDecoder();
                d.GetChars(byData, 0, byData.Length, charData, 0);
                Console.WriteLine(charData);
                file.Close();
            }
            catch (IOException e)
            {
                Console.WriteLine(e.ToString());
            }
        }
    
复制代码

  (2).使用StreamReader读取文件,然后一行一行的输出。

复制代码
    public void Read(string path)
        {
            StreamReader sr = new StreamReader(path,Encoding.Default);
            String line;
            while ((line = sr.ReadLine()) != null) 
            {
                Console.WriteLine(line.ToString());
            }
        }
复制代码

3.文件的写入
  (1).使用FileStream类创建文件,然后将数据写入到文件里。

复制代码
        public void Write()
        {
            FileStream fs = new FileStream("E:\ak.txt", FileMode.Create);
            //获得字节数组
            byte[] data = System.Text.Encoding.Default.GetBytes("Hello World!"); 
            //开始写入
            fs.Write(data, 0, data.Length);
            //清空缓冲区、关闭流
            fs.Flush();
            fs.Close();
        }
复制代码

  (2).使用FileStream类创建文件,使用StreamWriter类,将数据写入到文件。

复制代码
        public void Write(string path)
        {
            FileStream fs = new FileStream(path, FileMode.Create);
            StreamWriter sw = new StreamWriter(fs);
            //开始写入
            sw.Write("Hello World!!!!");
            //清空缓冲区
            sw.Flush();
            //关闭流
            sw.Close();
            fs.Close();
        }
复制代码

  以上就完成了,txt文本文档的数据读取与写入。

案例二:https://www.cnblogs.com/zoujinhua/p/11325062.html

C#文件流的读写

1.文件流写入的一般步骤

  1.定义一个写文件流

  2.定义一个要写入的字符串

  3.完成字符串转byte数组

  4.把字节数组写入指定路径的文件

  5.关闭文件流

2.文件流读入的一般步骤

  1.定义一个读文件流

  2.开辟一块足够大的字节数组内存空间

  3.把指定文件的内容读入字节数组

  4.完成字节数组转字符串操作

  5.关闭文件流

具体代码如下:

复制代码
复制代码
 1 using System;
 2 using System.IO;
 3 using System.Text;
 4 namespace LearnFileStream
 5 {
 6     class Program
 7     {
 8         string path = @"E:AdvanceCSharpProjectLearnCSharpLearnFileStream.txt";
 9 
10         private void TestWrite()
11         {
12             //定义写文件流
13             FileStream fsw = new FileStream(path, FileMode.OpenOrCreate);
14             //写入的内容
15             string inputStr = "Learn Advanced C Sharp";
16             //字符串转byte[]
17             byte[] writeBytes = Encoding.UTF8.GetBytes(inputStr);
18             //写入
19             fsw.Write(writeBytes, 0, writeBytes.Length);
20             //关闭文件流
21             fsw.Close();
22         }
23 
24         private void TestRead()
25         {
26             //定义读文件流
27             FileStream fsr = new FileStream(path, FileMode.Open);
28             //开辟内存区域 1024 * 1024 bytes
29             byte[] readBytes = new byte[1024 * 1024];
30             //开始读数据
31            int count = fsr.Read(readBytes, 0, readBytes.Length);
32             //byte[]转字符串
33             string readStr = Encoding.UTF8.GetString(readBytes, 0, count);
34             //关闭文件流
35             fsr.Close();
36             //显示文件内容
37             Console.WriteLine(readStr);
38         }
39         static void Main(string[] args)
40         {
41             new Program().TestWrite();
42             new Program().TestRead();
43         }
44     }
45 }
复制代码

 1、FileStream 继承自 Stream。
Stream 表示“流”(这个bai概念在计算机中非常常见,题主可以自行搜索相关资料),本质上是一种字节序列。说穿了,计算机只认识0和1,那么这么丰富多彩的文本、音乐、视频,归根结底都是转换成字节存储在内存与硬盘中的。
Stream 对象有一个属性 Length,表示这个流的长度;还有一个属性 Position,表示这个流当前的位置。
Stream.Read(byte[] array, int offset, int count);
array 表示缓冲区;offset 表示从流的当前位置(也就上面说的 Position)偏移多少个字节开始读;count 表示读取多少个字节。该方法返回的是实际上读取了多少个字节(永远小于等于 count),如果该值等于 0,说明已经到流的末尾了。读取之后,这个流的 Position 就会发生变化。
为什么要缓冲区?因为一个流很可能非常大,一次性的加载是不现实的,所以需要分块来读取,存储每个分块的这个字节数组就叫做“缓冲区”。
2、底层调用的是 kernel32.dll 中的 Windows API 方法 ReadFile()

C# 向文件末尾追加数据

  FileStream outputStream = null;

 outputStream = new FileStream(path, FileMode.Append);//Append决定outputStream.Write写入时,是从头开始覆盖,还是从末尾追加。 

树立目标,保持活力,gogogo!
原文地址:https://www.cnblogs.com/hao-1234-1234/p/14236832.html