สตรีมใน C#: StreamReader และ StreamWriter [ตัวอย่าง]

⚡ สรุปอย่างชาญฉลาด

AC# Stream คือเลเยอร์ที่อยู่ระหว่างแอปพลิเคชันของคุณกับไฟล์ ซึ่งช่วยให้คุณสามารถอ่านหรือเขียนข้อมูลเป็นส่วนเล็กๆ ได้ ในที่นี้คุณจะได้เรียนรู้วิธีการใช้งาน StreamReader และ StreamWriter การทำงาน พร้อมตัวอย่าง และประเภทกระแสหลัก

  • 🌊 มันคืออะไร: สตรีมคือชั้นกลางระหว่างแอปพลิเคชันของคุณกับไฟล์
  • ???? สตรีมรีดเดอร์: StreamReader อ่านข้อความจากไฟล์ทีละบรรทัดหรือทีละส่วน
  • 🇧🇷 กระแสWriter: กระแสWriter เขียนข้อความลงไฟล์ผ่านทางสตรีม
  • 🧩 ประเภทของสตรีม: ไฟล์สตรีม, เมมโมรีสตรีม และ Bufferคลาส edStream ทั้งหมดสืบทอดมาจากคลาส Stream
  • 🤖 ความช่วยเหลือจาก AI: เครื่องมือ AI เช่น GitHub Copilot สามารถสร้างโค้ด C# สำหรับสตรีมได้ทันที

ตัวอ่านสตรีม C# และ Writer

สตรีม C # คืออะไร

ในการดำเนินการไฟล์ C# โดยปกติจะใช้สตรีมเพื่ออ่านและเขียนไฟล์ สตรีมคือเลเยอร์เพิ่มเติมที่สร้างขึ้นระหว่างแอปพลิเคชันและไฟล์ สตรีมใช้เพื่อให้แน่ใจว่าการอ่านและเขียนไฟล์จะราบรื่น

โดยปกติแล้วสตรีมจะใช้เมื่ออ่านข้อมูลจากไฟล์ขนาดใหญ่ โดยการใช้สตรีม ข้อมูลจากไฟล์ขนาดใหญ่จะแบ่งออกเป็นชิ้นเล็กๆ และส่งไปยังสตรีม ข้อมูลเหล่านี้สามารถอ่านได้จากแอปพลิเคชัน

เหตุผลในการแบ่งมันออกเป็นชิ้นเล็กๆ ก็เนื่องมาจากผลกระทบของการอ่านไฟล์ขนาดใหญ่ในช็อตเดียว หากคุณต้องอ่านข้อมูลจากไฟล์ขนาด 100 MB ในคราวเดียว แอปพลิเคชันของคุณอาจหยุดทำงานและไม่เสถียร แนวทางที่ดีที่สุดคือการใช้สตรีมเพื่อแบ่งไฟล์ออกเป็นส่วนๆ ที่สามารถจัดการได้

ดังนั้นเมื่อดำเนินการเขียนข้อมูลในไฟล์ ข้อมูลที่ต้องการเขียนจะถูกเขียนลงในสตรีมก่อน จากนั้นจึงเขียนข้อมูลจากสตรีมลงในไฟล์ การดำเนินการอ่านก็เช่นเดียวกัน ในการดำเนินการอ่าน ข้อมูลจะถูกโอนจากไฟล์ไปยังสตรีมก่อน จากนั้นจึงอ่านข้อมูลจากแอปพลิเคชันผ่านสตรีม มาดูตัวอย่างการอ่านและเขียนโดยใช้สตรีมกัน

ประเภทของสตรีมใน C#

คลาสสตรีมทั้งหมดใน C# สืบทอดมาจากคลาส abstract Stream ชั้นเรียนใน System.IO เนมสเปซ แต่ละประเภทกำหนดเป้าหมายไปยังแหล่งข้อมูลที่แตกต่างกัน แต่มีเมธอดการอ่านและการเขียนเหมือนกัน สตรีมที่ใช้กันทั่วไปมากที่สุดแสดงไว้ด้านล่าง

  • ไฟล์สตรีม อ่านและเขียนไฟล์บนดิสก์ทีละไบต์หรือทีละบล็อก
  • เมมโมรี่สตรีม จัดเก็บข้อมูลในหน่วยความจำแทนที่จะเป็นไฟล์ ซึ่งมีประโยชน์สำหรับบัฟเฟอร์ชั่วคราว
  • BufferedStream ห่อหุ้มสตรีมอื่นเพื่อลดจำนวนการทำงานของดิสก์หรือเครือข่ายที่ช้า
  • เน็ตเวิร์กสตรีม ส่งและรับข้อมูลผ่านซ็อกเก็ตเครือข่าย

สำหรับการทำงานกับข้อความ C# มีฟังก์ชันต่างๆ ให้ใช้งาน StreamReader และ StreamWriter คลาสตัวช่วย ซึ่งทำหน้าที่ห่อหุ้มสตรีม และจะกล่าวถึงในหัวข้อถัดไป

สตรีมรีดเดอร์

โปรแกรมอ่านสตรีมใช้เพื่ออ่านข้อมูลจากไฟล์โดยใช้สตรีม ข้อมูลจากไฟล์จะถูกอ่านลงในสตรีมก่อน หลังจากนั้นแอปพลิเคชันจะอ่านข้อมูลจากสตรีม

สำหรับตัวอย่างของเรา เราจะถือว่าเรามีไฟล์ในไดรฟ์ 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 เพื่อเขียนบรรทัด “Guru99 – ASP.Net” ลงในสตรีม จากนั้นบรรทัดนั้นจะถูกเขียนลงในไฟล์จากสตรีม
  3. จากนั้นเราจะปิดตัวเขียนสตรีมหลังจากเขียนลงในไฟล์ โดยปกติแล้ว แนวทางปฏิบัติที่ดีในการปิดตัวจัดการไฟล์เมื่อไฟล์นั้นไม่จำเป็นสำหรับการเขียนอีกต่อไป
  4. สุดท้ายนี้ เรากำลังอ่านเนื้อหาของไฟล์อีกครั้งและเขียนลงในบันทึกของคอนโซล นี่เป็นการตรวจสอบว่ามีการเขียนบรรทัดลงในไฟล์หรือไม่

เมื่อตั้งค่าโค้ดข้างต้นแล้ว และรันโปรเจ็กต์โดยใช้ Visual Studio คุณจะได้ผลลัพธ์ด้านล่างนี้

ผลลัพธ์:-

กระแส Writer

จากผลลัพธ์ คุณจะเห็นว่าบรรทัด “Guruข้อความ “99 – ASP.Net” ถูกเพิ่มลงในไฟล์เรียบร้อยแล้ว สามารถดูข้อความทั้ง 3 บรรทัดได้ในคอนโซล

คำถามที่พบบ่อย

สตรีมเป็นชั้นกลางระหว่างแอปพลิเคชันกับไฟล์ ทำหน้าที่แบ่งไฟล์ขนาดใหญ่เป็นส่วนย่อยๆ เพื่อให้สามารถอ่านหรือเขียนข้อมูลได้โดยไม่ต้องโหลดไฟล์ทั้งหมดลงในหน่วยความจำ

StreamReader อ่านข้อมูลข้อความจากไฟล์ผ่านทางสตรีม ไฟล์OpenText เมธอดนี้จะส่งคืนอ็อบเจ็กต์ StreamReader โดยเมธอด ReadLine จะอ่านไฟล์ทีละบรรทัด

กระแสWriter เขียนข้อมูลข้อความลงในไฟล์ผ่านทางสตรีม เมธอด File.AppendText จะส่งคืนสตรีมWriterและเมธอด WriteLine ของมันจะส่งข้อมูลแต่ละบรรทัดไปยังไฟล์

สตรีมทั่วไปได้แก่ FileStream สำหรับไฟล์ และ MemoryStream สำหรับข้อมูลในหน่วยความจำ BufferedStream ใช้สำหรับการบัฟเฟอร์ และ NetworkStream ใช้สำหรับซ็อกเก็ต ทั้งหมดนี้สืบทอดมาจาก abstracคลาสสตรีม t

FileStream อ่านและเขียนไบต์ดิบลงในไฟล์ ในขณะที่ StreamReader จะแปลงสตรีมเพื่ออ่านข้อความในรูปแบบอักขระและบรรทัด StreamReader จึงใช้งานง่ายกว่าสำหรับไฟล์ข้อความ

ผู้ช่วย AI เช่น GitHub Copilot, StreamReader และ Stream ที่ช่วยเติมคำอัตโนมัติWriter เขียนโค้ด เพิ่มบล็อกการใช้งานสำหรับการกำจัด และสร้างลูปการอ่านไฟล์จากความคิดเห็นสั้นๆ

ใช่แล้ว เครื่องมือที่ขับเคลื่อนด้วย AI จะสร้างวิธีการอ่านและเขียนสตรีม แนะนำการบัฟเฟอร์สำหรับไฟล์ขนาดใหญ่ และเพิ่มคำสั่ง using เพื่อปิดสตรีมอย่างปลอดภัย

คำสั่ง `using` จะปิดและปล่อยทรัพยากรของสตรีมโดยอัตโนมัติเมื่อบล็อกสิ้นสุดลง แม้ว่าจะเกิดข้อผิดพลาดก็ตาม การทำเช่นนี้จะปล่อยแฮนเดิลไฟล์และป้องกันการรั่วไหลของทรัพยากร

สรุปโพสต์นี้ด้วย: