C# 中的 Stream:StreamReader 和 StreamWriter [例子]

⚡ 智能摘要

AC# Stream 是应用程序和文件之间的一个层,它允许您以小块形式读取或写入数据。在这里,您将学习 StreamReader 和 Stream 的用法。Writer 工作,并举例说明和主流类型。

  • 🌊 它是什么: 流是应用程序和文件之间的中间层。
  • ???? StreamReader: StreamReader 一次从文件中读取一行或一块文本。
  • ✍️ 资讯Writer: 资讯Writer 通过流将文本写入文件。
  • 🧩 流类型: FileStream、MemoryStream 和 Buffer所有 edStream 都派生自 Stream 类。
  • 🤖 人工智能帮助: GitHub Copilot 等 AI 工具可立即生成 C# 流代码。

C# 流读取器和 Writer

什么是 C# Stream?

在 C# 文件操作中,通常使用流来读取和写入文件。流是在应用程序和文件之间创建的附加层。流用于确保对文件的读取和写入操作顺利进行。

流通常用于从大型文件中读取数据。通过使用流,大型文件中的数据被分解成小块并发送到流。然后可以从应用程序中读取这些数据块。

将其分解成小块的原因在于一次性读取大文件会对性能产生影响。如果您一次性读取 100 MB 的文件数据,您的应用程序可能会挂起并变得不稳定。最好的方法是使用流将文件分解成可管理的块。

因此,当对文件执行写入操作时,要写入的数据首先写入流。然后,数据从流写入文件。读取操作也是如此。在读取操作中,数据首先从文件传输到流。然后通过流从应用程序读取数据。让我们看一个例子,了解如何使用流进行读写。

C# 中的流类型

C# 中的所有流类都派生自 abs。tract Stream 在课堂上 System.IO 命名空间。每种类型都面向不同的数据源,但共享相同的读取和写入方法。下面列出了最常用的流。

  • 的FileStream 从磁盘读取和写入文件,一次读取一个字节或一个块。
  • MemoryStream 将数据存储在内存中而不是文件中,这对于临时缓冲区非常有用。
  • BufferedStream 封装另一个流,以减少缓慢的磁盘或网络操作次数。
  • NetworkStream 通过网络套接字发送和接收数据。

C# 提供了用于处理文本的功能 StreamReaderStreamWriter 辅助类,用于封装流,将在下一节中介绍。

流读取器

流读取器用于使用流从文件中读取数据。首先将文件中的数据读入流中。然后应用程序从流中读取数据。

为了举个例子,我们假设 D 盘中有一个名为 Example.txt 的文件。该文件是一个简单的文本文件,有 2 行,如下所示

  • Guru99 – .Net
  • Guru99 -C#

为了举个例子,我们将创建一个简单的控制台应用程序并使用文件流

让我们看一个例子,了解如何使用流从文件读取数据。在 program.cs 文件中输入以下代码。

流读取器

using System;
using System.IO;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace DemoApplication
{
  class Tutorial
  {
   static void Main(string[] args)
   {
    String path = @"D:\Example.txt";

    using (StreamReader sr = File.OpenText(path))
    {
     String s = "";

     while ((s = sr.ReadLine()) != null)
     {
      Console.WriteLine(s);
     }
    }
   Console.ReadKey();
  }
 }
}

Code 解释:-

  1. 首先,我们声明一个流读取器对象。流读取器对象在 C# 中用于定义从文件到应用程序的流。每当从文件读取数据时,数据就会从文件推送到流。文件。OpenText 用于以只读模式打开文件“Example.txt”。然后将文件的处理程序发送到流读取器对象。
  2. 接下来,我们定义一个临时变量“s”,用于从文件读取所有数据。
  3. 然后我们使用流读取器方法 ReadLine 从流缓冲区读取每一行。执行此操作时 操作,每行将首先从文件传输到缓冲区。然后字符串行将从缓冲区传输到变量“s”。然后我们将字符串“s”的内容写入控制台。

设置上述代码后,使用以下方法运行项目 Visual Studio中,你将获得以下输出。

输出:-

流读取器

从输出中,你可以看到 Stream Reader 从文件中读取了两行。最后,从流中读取的字符串行被发送到控制台。

资讯 Writer

流写入器用于使用流将数据写入文件。首先将应用程序中的数据写入流中。之后,流将数据写入文件。让我们看一个例子,了解如何使用流从文件写入数据。在 program.cs 文件中输入以下代码。

资讯 Writer

using System;
using System.IO;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace DemoApplication
{
  class Tutorial
  {
   static void Main(string[] args)
   {
    String path = @"D:\Example.txt";
    
    using (StreamWriter sr = File.AppendText(path))
    {
     sr.WriteLine("Guru99 - ASP.Net");
     sr.Close();

     Console.WriteLine(File.ReadAllText(path));
    }
    Console.ReadKey();
  }
 }
}

Code 解释:-

  1. 首先,我们声明一个流写入器对象。流写入器对象在 C# 中用于定义流。然后,该流用于将数据从应用程序写入文件。每当需要写入数据时,数据都会从应用程序推送到流。File.AppendText 命令用于以追加模式打开文件“Example.txt”。然后将文件的处理程序发送到流写入器对象。
  2. 我们使用流写入方法 Writeline 来写入该行“Guru将“99 – ASP.Net”添加到流中。然后,该行将从流中写入文件。
  3. 然后我们在写入文件后关闭流写入器。当文件不再需要用于写入目的时,关闭文件处理程序通常是一种很好的做法。
  4. 最后,我们再次读取文件内容并将其写入控制台日志。这是为了检查该行是否已写入文件。

当设置了上述代码并使用 Visual Studio 运行项目时,您将获得以下输出。

输出:-

资讯 Writer

从输出结果可以看出,该行“Guru“99 – ASP.Net”已成功添加到文件中。控制台中可以看到全部3行文本。

常见问题

流是应用程序和文件之间的中间层。它将大文件分割成小块,这样就可以在不将整个文件加载到内存中的情况下读取或写入数据。

StreamReader 通过流从文件中读取文本数据。文件。OpenText 返回一个 StreamReader,其 ReadLine 方法一次读取文件中的一行。

资讯Writer 通过流将文本数据写入文件。File.AppendText 返回一个 Stream 对象。Writer它的 WriteLine 方法会将每一行发送到文件中。

常见的流包括用于文件传输的 FileStream 和用于内存数据的 MemoryStream。 BufferedStream 用于缓冲,NetworkStream 用于套接字。它们都源自 abs。tract 流类。

FileStream 直接读取和写入文件的原始字节流,而 StreamReader 则封装了一个流,将文本作为字符和行读取。StreamReader 更适合处理文本文件。

GitHub Copilot、自动补全 StreamReader 和 Stream 等 AI 助手Writer 代码,添加 using 块进行资源释放,并根据简短注释生成文件读取循环。

是的。人工智能工具会生成流的读写方法,建议对大文件进行缓冲,并添加 using 语句以确保流的安全关闭。

using 语句会在代码块结束时自动关闭并释放流,即使发生错误也是如此。这样可以释放文件句柄,防止资源泄漏。

总结一下这篇文章: