• C# File类中的文件读写方法


    C#提供了多种操作文件的方案,File类中封装的静态方法,接口封装得比较人性化,隐藏了具体实现的细节,主要包括读取、写入以及追加,这些函数如下

    类别字节读写字符串列表字符串
    读取ReadAllBytesReadAllLinesReadAllTextReadLines
    写入WriteAllBytesWriteAllLinesWriteAllText
    追加AppendAllLinesAppendAllTextAppendText

    这些方法大部分都有其异步模式,以RaadAllBytes为例,其对应的异步方法ReadAllBytesAsync,即在后面加一个Async

    这些方法中,读取操作需要至少输入一个字符串,表示文件路径,其返回值为字节数、字符串或者字符串列表;追加和写入操作,至少需要输入一个文件路径以及将要写入的内容,根据函数类别不同,可以是字节数组、字符串或者字符串列表。

    下面在顶级语句中,对这些函数做一些基础的演示。

    字节读写

    ReadAllBytesWriteAllBytes是用于读写字节数组的方法,

    byte[] data = new byte[1024];
    for (int i = 0; i < 1024; i++)
        data[i] = (byte)i;
    
    File.WriteAllBytes("test.bin", data);
    
    • 1
    • 2
    • 3
    • 4
    • 5

    运行之后,将在运行目录创建一个test.bin文件,接下来通过ReadAllBytes对其读取。

    data = File.ReadAllBytes("test.bin");
    foreach (var d in data)
        Console.Write($"{d}, ");
    
    • 1
    • 2
    • 3

    其输出结果为0-255的数字,类似下面这样,这是在创建文件时,已经把i转换为了字节,1个字节只有8位,最大值就是255。

    ...251, 252, 253, 254, 255, 0, 1, 2, 3, 4, 5...
    
    • 1

    字符串读写和追加

    通过xxxAllText可以直接读取文本文档,这些函数提供了两个重载,一种只需要输入文件名和写入内容,另一种需要指定编码方式。

    File.WriteAllText("test.txt", "if u miss the train i'm on, ");
    File.AppendAllText("test.txt", "u will know that i'm gone");
    var s = File.ReadAllText("test.txt");
    Console.WriteLine(s);
    
    • 1
    • 2
    • 3
    • 4

    输出结果为

    if u miss the train i'm on, u will know that i'm gone
    
    • 1

    如果指定编码方式,尽管对英文来说可能无所谓,但编码不匹配,可能导致出现乱码,示例如下

    File.WriteAllText("test.txt", "桃李春风一杯酒");
    File.AppendAllText("test.txt", "江湖夜雨十年灯", Encoding.Unicode);
    
    var s = File.ReadAllText("test.txt");
    Console.WriteLine(s);
    
    • 1
    • 2
    • 3
    • 4
    • 5

    效果为

    桃李春风一杯酒_lVnY?ASt^op
    
    • 1

    字符串数组

    xxxAllLines可以操作字符串数组,或以字符串为元素的其他可迭代对象。

    string[] poem0 = new string[] { "我居北海君南海", "寄雁传书谢不能" };
    string[] poem1 = new string[] { "桃李春风一杯酒", "江湖夜雨十年灯" };
    File.WriteAllLines("lines.txt", poem0);
    File.AppendAllLines("lines.txt", poem1);
    
    var s = File.ReadAllLines("lines.txt");
    foreach (var item in s)
        Console.WriteLine(item);
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8

    效果如下


    我居北海君南海
    寄雁传书谢不能
    桃李春风一杯酒
    江湖夜雨十年灯


  • 相关阅读:
    面试经典(5/150)多数元素
    采集软件在市场营销中的应用价值
    ES 中时间日期类型 “yyyy-MM-dd HHmmss” 的完全避坑指南
    c# 调用巴斯勒相机 进行图像识别
    特斯拉自动驾驶(FSD系统)简介
    协程Part1-boost.Coroutine.md
    Redis入门完整教程:事务与Lua
    Go的优雅退出
    GOPS现场 | 对话龙智大规模安全研发技术专家,分享静态代码、开源组件扫描干货
    计算机网络之传输层
  • 原文地址:https://blog.csdn.net/m0_37816922/article/details/130667426