• 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!
  • 相关阅读:
    httpclient 使用问题记录:org.apache.http.HttpException: Unsupported Content-Coding:GLZip
    Gitserver端密码变更,但是本地gitconfig配置未变更账号和密码问题解决
    线程池ThreadPoolExecutor学习
    Java 网络编程
    org.apache.ibatis.binding.BindingException: Invalid bound statement Mybatis绑定错误问题解决
    Java string类
    maven3.6.2 版本 在idea 2019.2.2下遇到的问题解决记录
    python
    django-URL与视图配置
    python 的datetime模块使用
  • 原文地址:https://www.cnblogs.com/hao-1234-1234/p/14236832.html
Copyright © 2020-2023  润新知