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

作者:微小冷 时间:2023-04-14 09:52:08 

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

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

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

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

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

字节读写

ReadAllBytes和WriteAllBytes是用于读写字节数组的方法,

byte[] data = new byte[1024];
for (int i = 0; i < 1024; i++)
   data[i] = (byte)i;

File.WriteAllBytes("test.bin", data);

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

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

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

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

字符串读写和追加

通过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);

输出结果为

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

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

File.WriteAllText("test.txt", "桃李春风一杯酒");
File.AppendAllText("test.txt", "江湖夜雨十年灯", Encoding.Unicode);

var s = File.ReadAllText("test.txt");
Console.WriteLine(s);

效果为

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

字符串数组

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

效果如下

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

来源:https://blog.csdn.net/m0_37816922/article/details/130667426

标签:C#,文件,读写
0
投稿

猜你喜欢

  • Spring创建Bean的6种方式详解

    2022-07-18 19:10:13
  • 使用Java构造和解析Json数据的两种方法(详解一)

    2023-01-26 01:51:18
  • Java并发编程之同步容器

    2023-03-10 16:34:29
  • Android App自动更新之通知栏下载

    2023-11-07 16:56:45
  • Android刮刮卡实现原理与代码讲解

    2021-08-06 13:50:42
  • Android之AttributeSet案例详解

    2022-03-20 12:05:12
  • Android 详解沉浸式状态栏的实现流程

    2023-12-18 23:03:31
  • Android中 动态改变对话框值的方法

    2023-08-17 19:44:30
  • C#方法中参数ref和out详解

    2021-07-19 12:59:32
  • SpringBoot集成Spring Security用JWT令牌实现登录和鉴权的方法

    2023-07-02 22:48:29
  • Android实现Back功能代码片段总结

    2021-05-27 01:33:06
  • springboot基于Redis发布订阅集群下WebSocket的解决方案

    2023-07-14 04:37:45
  • Android使用ViewDragHelper实现QQ6.X最新版本侧滑界面效果实例代码

    2022-10-14 08:38:22
  • 详解Glide4.0集成及使用注意事项

    2021-12-28 00:09:06
  • Java中DecimalFormat用法及符号含义

    2023-05-04 04:31:14
  • 浅谈Java 类中各成分加载顺序和内存中的存放位置

    2022-12-23 17:24:23
  • java去除空格、标点符号的方法实例

    2021-12-01 16:16:42
  • Java实现FTP文件与文件夹的上传和下载

    2023-09-17 09:45:50
  • 简单了解Java方法的定义和使用实现详解

    2023-10-30 16:12:46
  • C#实现将程序运行信息写入日志的方法

    2021-11-22 22:30:09
  • asp之家 软件编程 m.aspxhome.com