ZetCode

C# 写入文本文件

最后修改于 2023 年 7 月 5 日

C# 写入文本文件演示了如何在 C# 中写入文本文件。C# 中的输入/输出操作基于流。流是所有流的抽象基类。

C# 中的输入/输出基于流。Stream 是所有流的抽象基类。流是字节序列的抽象,例如文件、输入/输出设备、进程间通信管道或 TCP/IP 套接字。

C# 流

Stream 提供了一个通用的输入和输出类型接口,并将程序员与操作系统和底层设备的具体细节隔离开来。例如,MemoryStream 处理位于内存中的数据,而 FileStream 处理文件中的数据。

C# 使用 File.WriteAllText 写入文本文件

File.WriteAllText 方法创建一个新文件,将内容写入该文件,然后关闭该文件。如果目标文件已经存在,则会被覆盖。

Program.cs
var path = "data.txt";

string text = "old falcon";
File.WriteAllText(path, text);

Console.WriteLine("text written");

此示例将文本写入文件。

File.WriteAllText(path, text);

File.WriteAllText 方法接受两个参数:要写入的文件和要写入文件的字符串。该方法接受一个可选的第三个参数:编码。如果未指定,则设置为 UTF8。

C# 使用 File.WriteAllLines 写入文本

File.WriteAllLines 方法创建一个新文件,将一个或多个字符串写入该文件,然后关闭该文件。

Program.cs
var path = "data.txt";

string[] lines = {"old falcon", "deep forest", "golden ring"};
File.WriteAllLines(path, lines);

Console.WriteLine("lines written to file");

此示例将三行写入文件。

string[] lines = {"old falcon", "deep forest", "golden ring"};

这是一个包含三行的字符串数组。

File.WriteAllLines(path, lines);

使用 File.WriteAllLines 方法将这些行写入文件。

C# 使用 File.WriteAllBytes 写入文本

File.WriteAllBytes 方法创建一个新文件,将指定的字节数组写入该文件,然后关闭该文件。如果目标文件已经存在,则会被覆盖。

Program.cs
using System.Text;

var path = "data.txt";

string text = "Today is a beautiful day. We go swimming and fishing.";
byte[] data = Encoding.ASCII.GetBytes(text);

File.WriteAllBytes(path, data);

Console.WriteLine("data written to file");

此示例使用 File.WriteAllBytes 方法将文本写入文本文件。

string text = "Today is a beautiful day. We go swimming and fishing.";
byte[] data = Encoding.ASCII.GetBytes(text);

首先,我们使用 Encoding.ASCII.GetBytes 方法将文本转换为字节。

File.WriteAllBytes(path, data);

然后,使用 File.WriteAllBytes 方法将字节数组写入文件。

C# 使用 StreamWriter 的 WriteLine 写入文本

StreamWriterWriteLine 方法将格式化的字符串和新行写入流。

Program.cs
var path = "data.txt";

using var sw = new StreamWriter(path);
sw.WriteLine("old falcon");

Console.WriteLine("data written to file");

此示例将一行写入文本文件。

using var sw = new StreamWriter(path);
sw.WriteLine("old falcon");

将一行写入文本文件。 我们使用 using 关键字在 sw 变量超出范围时自动释放文件资源。

C# 使用 FileStream 的 write 写入文本

FileStreamwrite 方法将字节块写入文件流。

public override void Write(byte[] array, int offset, int count);

第一个参数是包含要写入流的数据的缓冲区。 第二个参数是数组中从零开始的字节偏移量,从此偏移量开始将字节复制到流。 第三个参数是要写入的最大字节数。

Program.cs
using System.Text;

var path = "data.txt";

using FileStream fs = File.OpenWrite(path);

var data = "falcon\nhawk\nforest\ncloud\nsky";
byte[] bytes = Encoding.UTF8.GetBytes(data);

fs.Write(bytes, 0, bytes.Length);

Console.WriteLine("data written to file");

此示例将文本数据写入文本文件。

using FileStream fs = File.OpenWrite(path);

首先,我们使用 File.OpenWrite 方法打开一个文件流。

var data = "falcon\nhawk\nforest\ncloud\nsky";
byte[] bytes = Encoding.UTF8.GetBytes(data);

然后,我们使用 Encoding.UTF8.GetBytes 方法将文本数据转换为字节。

fs.Write(bytes, 0, bytes.Length);

最后,我们将字节数组写入文件流。

C# 异步写入文本

在前面的示例中,我们已经同步写入了文本数据。 C# 还提供了等效的异步方法。

File.WriteAllTextAsync 异步创建一个新文件,将指定的字符串写入该文件,然后关闭该文件。 如果目标文件已经存在,则会被覆盖。

Program.cs
var path = "data.txt";

string text = "an old falcon";
await File.WriteAllTextAsync(path, text);

Console.WriteLine("text written");

在该示例中,我们异步写入文本文件。

await File.WriteAllTextAsync(path, text);

await 运算符应用于异步方法中的任务,以暂停方法的执行,直到等待的任务完成。

来源

File 类 - 语言参考

在本文中,我们已经介绍了在 C# 中以各种方式写入文本文件的方法。

作者

我叫 Jan Bodnar,是一位充满激情的程序员,拥有丰富的编程经验。 自 2007 年以来,我一直撰写编程文章。 迄今为止,我撰写了 1,400 多篇文章和 8 本电子书。 我拥有超过十年的编程教学经验。

列出所有 C# 教程