C# FileStream
最后修改于 2025 年 4 月 22 日
本 C# FileStream 教程演示了如何使用 C# 中的 FileStream 类来读取和写入文件。
C# FileStream
FileStream
类为文件操作提供了一个 Stream
接口,从而能够进行同步和异步的读取和写入。流表示从源到目标的数据序列,源和目标可能包括磁盘、内存、套接字或其他程序。
在使用 FileStream
时,操作在字节级别执行。为了更方便地处理文本数据,开发人员可以使用 StreamWriter
和 StreamReader
类。
C# FileStream 写入文本
以下示例说明了如何使用 FileStream
类将文本数据写入文件。
using System.Text; var fileName = @"C:\Users\Jano\Documents\words.txt"; using FileStream fs = File.OpenWrite(fileName); var data = "falcon\nhawk\nforest\ncloud\nsky"; byte[] bytes = Encoding.UTF8.GetBytes(data); fs.Write(bytes, 0, bytes.Length);
此示例将几个单词写入文本文件,演示了基本的文件输出操作。
using FileStream fs = File.OpenWrite(fileName);
File.OpenWrite
方法初始化一个配置为写入操作的 FileStream
实例。
var data = "falcon\nhawk\nforest\ncloud\nsky"; byte[] bytes = Encoding.UTF8.GetBytes(data);
文本数据使用 Encoding.UTF8.GetBytes
方法转换为字节数组以进行文件写入。
fs.Write(bytes, 0, bytes.Length);
Write
方法将字节数组写入 FileStream
,将数据存储在文件中。
C# FileStream 使用 StreamWriter 写入文本
此示例演示了将 FileStream
与 StreamWriter
结合使用以进行高效文本写入。
var fileName = @"C:\Users\Jano\Documents\words.txt"; using FileStream fs = File.Create(fileName); using var sr = new StreamWriter(fs); sr.WriteLine("coin\nfalcon\nhawk\nforest"); Console.WriteLine("done");
此示例使用 StreamWriter
将文本写入文件,从而简化了以指定编码写入字符数据的过程。
using FileStream fs = File.Create(fileName); using var sr = new StreamWriter(fs);
创建一个 StreamWriter
实例,并将 FileStream
作为其底层流接受。
sr.WriteLine("coin\nfalcon\nhawk\nforest");
WriteLine
方法将一行文本写入 FileStream
,并附加一个换行符。
C# FileStream 读取文本
以下示例展示了如何使用 FileStream
从文件中读取文本数据。
using System.Text; var fileName = @"C:\Users\Jano\Documents\words.txt"; using FileStream fs = File.OpenRead(fileName); byte[] buf = new byte[1024]; int c; while ((c = fs.Read(buf, 0, buf.Length)) > 0) { Console.WriteLine(Encoding.UTF8.GetString(buf, 0, c)); }
此示例读取一个文本文件,使用 UTF8 编码将其字节数据转换为字符串,并将内容输出到控制台。
using FileStream fs = File.OpenRead(fileName);
File.OpenRead
方法打开一个用于读取的 FileStream
,为输入操作准备文件。
byte[] buf = new byte[1024];
分配一个字节数组 buf
,用于存储从文件中读取的数据。
while ((c = fs.Read(buf, 0, buf.Length)) > 0) { Console.WriteLine(Encoding.UTF8.GetString(buf, 0, c)); }
Read
方法将一个字节块从 FileStream
检索到缓冲区中。Encoding.UTF8.GetString
方法将这些字节转换为字符串以进行显示。
C# FileStream 使用 StreamReader 读取文本
此示例演示了结合使用 FileStream
和 StreamReader
从文件中读取文本。
var fileName = @"C:\Users\Jano\Documents\words.txt"; using FileStream fs = File.OpenRead(fileName); using var sr = new StreamReader(fs); string line; while ((line = sr.ReadLine()) != null) { Console.WriteLine(line); }
此示例使用 StreamReader
读取一个文本文件,从而无需手动进行字节到字符的转换。
using FileStream fs = File.OpenRead(fileName); using var sr = new StreamReader(fs);
StreamReader
使用 FileStream
初始化,如果未指定,则默认使用 UTF8 编码。
string line; while ((line = sr.ReadLine()) != null) { Console.WriteLine(line); }
StreamReader
的 ReadLine
方法检索每一行文本,并在流结束时返回 null
。
C# FileStream CopyTo
CopyTo
方法将字节从一个流传输到另一个流,从而简化了文件复制操作。
var fileName = "words.txt"; using var fs = new FileStream(fileName, FileMode.Open); var fileName2 = "words_copy.txt"; using var fs2 = new FileStream(fileName2, FileMode.OpenOrCreate); fs.CopyTo(fs2); Console.WriteLine("File copied");
此示例使用 CopyTo
方法复制一个文本文件,演示了一个简单的文件复制过程。
C# FileStream 下载图片
以下示例说明了如何使用 FileStream
下载一个小图像文件。
using var httpClient = new HttpClient(); var url = "http://webcode.me/favicon.ico"; byte[] imageBytes = await httpClient.GetByteArrayAsync(url); using var fs = new FileStream("favicon.ico", FileMode.Create); fs.Write(imageBytes, 0, imageBytes.Length); Console.WriteLine("Image downloaded");
此示例使用 HttpClient
获取一个小图像作为字节数组,然后使用 FileStream
将其写入文件。
using var fs = new FileStream("favicon.ico", FileMode.Create); fs.Write(imageBytes, 0, imageBytes.Length);
创建一个新文件进行写入,并使用 Write
方法将图像的字节数组写入其中。
C# FileStream 读取图片
此示例演示了读取图像文件并将内容显示为十六进制数据。
var fileName = @"C:\Users\Jano\Documents\favicon.ico"; using var fs = new FileStream(fileName, FileMode.Open); int c; int i = 0; while ((c = fs.ReadByte()) != -1) { Console.Write("{0:X2} ", c); i++; if (i % 10 == 0) { Console.WriteLine(); } }
此示例读取一个小图像文件,并以十六进制格式输出其字节,适用于小文件。
while ((c = fs.ReadByte()) != -1) {
ReadByte
方法从文件中读取一个字节,推进位置,并在流结束时返回 -1。
Console.Write("{0:X2} ", c);
格式说明符 {0:X2}
以两位十六进制表示法显示每个字节。
if (i % 10 == 0) { Console.WriteLine(); }
每隔十个字节插入一个换行符,以便将十六进制输出组织成行。
C# FileStream 流式传输
流式传输涉及连续传输数据,允许接收者在接收到整个文件之前处理它。
using var httpClient = new HttpClient(); var url = "https://cdn.netbsd.org/pub/NetBSD/NetBSD-9.2/images/NetBSD-9.2-amd64-install.img.gz"; var fname = Path.GetFileName(url); var resp = await httpClient.GetAsync(url, HttpCompletionOption.ResponseHeadersRead); resp.EnsureSuccessStatusCode(); using Stream ms = await resp.Content.ReadAsStreamAsync(); using FileStream fs = File.Create(fname); await ms.CopyToAsync(fs); Console.WriteLine("file downloaded");
此示例使用流式传输下载 NetBSD USB 镜像,从而能够有效地处理大型文件。
using var httpClient = new HttpClient();
HttpClient
类有助于进行 HTTP 请求,以下载网络内容。
var resp = await httpClient.GetAsync(url, HttpCompletionOption.ResponseHeadersRead);
使用 HttpCompletionOption.ResponseHeadersRead
,操作在读取标头后完成,从而推迟内容检索。
using Stream ms = await resp.Content.ReadAsStreamAsync();
ReadAsStreamAsync
方法返回一个流,该流表示作为异步操作的 HTTP 内容。
using FileStream fs = File.Create(fname);
File.Create
方法创建或覆盖一个文件,为流式传输数据做准备。
await ms.CopyToAsync(fs);
CopyToAsync
方法持续将流的数据传输到文件流。
来源
本文探讨了使用 FileStream
在 C# 中读取和写入文件。
作者
列出所有 C# 教程。