Hướng dẫn phát trực tuyến trong C#: StreamReader & StreamWriter [Ví dụ]
Luồng C # là gì?
Trong các thao tác với tệp C#, các luồng thông thường được sử dụng để đọc và ghi vào tệp. Luồng là một lớp bổ sung được tạo giữa ứng dụng và tệp. Luồng này được sử dụng để đảm bảo các thao tác đọc và ghi vào tệp được trôi chảy.
Luồng thường được sử dụng khi đọc dữ liệu từ các tệp lớn. Bằng cách sử dụng các luồng, dữ liệu từ các tệp lớn được chia thành các phần nhỏ và gửi đến luồng. Những khối dữ liệu này sau đó có thể được đọc từ ứng dụng.
Lý do chia nó thành nhiều phần nhỏ là do tác động đến hiệu suất của việc đọc một tệp lớn trong một lần chụp. Nếu bạn đọc dữ liệu từ một tệp 100 MB trong một lần chụp, ứng dụng của bạn có thể bị treo và không ổn định. Cách tiếp cận tốt nhất là sử dụng các luồng để chia tệp thành các phần có thể quản lý được.
Vì vậy, khi thao tác ghi được thực hiện trên tệp, dữ liệu cần ghi trước tiên sẽ được ghi vào luồng. Từ luồng, dữ liệu sau đó được ghi vào tệp. Thao tác đọc cũng vậy. Trong thao tác đọc, dữ liệu đầu tiên được chuyển từ tệp sang luồng. Dữ liệu sau đó được đọc từ ứng dụng thông qua luồng. Hãy xem một ví dụ về cách chúng ta có thể đọc và viết bằng luồng.
Trình đọc luồng
Trình đọc luồng được sử dụng để đọc dữ liệu từ một tệp bằng luồng. Dữ liệu từ tệp đầu tiên được đọc vào luồng. Sau đó, ứng dụng sẽ đọc dữ liệu từ luồng.
Trong ví dụ của chúng tôi, chúng tôi sẽ giả sử rằng chúng tôi có một tệp trong ổ D có tên là example.txt. File sẽ là một file văn bản đơn giản và có 2 dòng như hình bên dưới
- Guru99 – .Net
- Guru99 -C#
Trong ví dụ của chúng tôi, chúng tôi sẽ tạo một ứng dụng Console đơn giản và làm việc với các luồng Tệp
Hãy xem một ví dụ về cách chúng ta có thể sử dụng các luồng để đọc dữ liệu từ một tệp. Nhập mã dưới đây vào tệp chương trình.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(); } } }
Giải thích mã: -
- Đầu tiên, chúng ta khai báo một đối tượng đọc luồng. Đối tượng trình đọc luồng được sử dụng trong C# để xác định luồng từ tệp đến ứng dụng. Dữ liệu sẽ được đẩy từ tệp vào luồng bất cứ khi nào dữ liệu được đọc từ tệp. Tập tin.OpenText được sử dụng để mở tệp “Example.txt” ở chế độ chỉ đọc. Sau đó, trình xử lý tệp sẽ được gửi đến đối tượng trình đọc luồng.
- Tiếp theo, chúng tôi xác định biến tạm thời 's' sẽ được sử dụng để đọc tất cả dữ liệu từ tệp.
- Sau đó chúng tôi sử dụng phương pháp đọc luồng ReadLine để đọc từng dòng từ bộ đệm luồng. Khi chúng tôi thực hiện điều này hoạt động, mỗi dòng đầu tiên sẽ được chuyển từ tệp đến bộ đệm. Sau đó, dòng chuỗi sẽ được chuyển từ bộ đệm đến biến 's'. Sau đó, chúng ta ghi nội dung của chuỗi 's' vào bảng điều khiển.
Khi mã trên được đặt và dự án được chạy bằng cách sử dụng Visual Studio, bạn sẽ nhận được kết quả đầu ra dưới đây.
Đầu ra: -
Từ đầu ra, bạn có thể thấy rằng Stream Reader đọc cả hai dòng từ tệp. Cuối cùng, các dòng của chuỗi đọc từ luồng đã được gửi tới Bảng điều khiển.
Người viết luồng
Trình ghi luồng được sử dụng để ghi dữ liệu vào tệp bằng luồng. Dữ liệu từ ứng dụng lần đầu tiên được ghi vào luồng. Sau đó luồng ghi dữ liệu vào tệp. Hãy xem một ví dụ về cách chúng ta có thể sử dụng luồng để ghi dữ liệu từ một tệp. Nhập mã dưới đây vào tệp chương trình.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 (StreamWriter sr = File.AppendText(path)) { sr.WriteLine("Guru99 - ASP.Net"); sr.Close(); Console.WriteLine(File.ReadAllText(path)); } Console.ReadKey(); } } }
Giải thích mã: -
- Đầu tiên, chúng ta khai báo một đối tượng ghi luồng. Đối tượng trình ghi luồng được sử dụng trong C# để xác định luồng. Luồng sau đó được sử dụng để ghi dữ liệu từ ứng dụng vào tệp. Dữ liệu sẽ được đẩy từ ứng dụng sang luồng bất cứ khi nào dữ liệu cần được ghi. Lệnh File.AppendText được sử dụng để mở tệp “Example.txt” ở chế độ chắp thêm. Sau đó, trình xử lý tệp sẽ được gửi đến đối tượng trình ghi luồng.
- Chúng tôi đang sử dụng phương thức ghi luồng Writeline để ghi dòng “Guru99 – ASP.Net” vào luồng. Từ luồng, dòng đó sẽ được ghi vào tệp.
- Sau đó chúng tôi đóng trình ghi luồng sau khi ghi vào tệp. Thông thường, bạn nên đóng trình xử lý tệp khi tệp không còn cần thiết cho mục đích ghi.
- Cuối cùng, chúng ta đọc lại nội dung của tệp và ghi nó vào nhật ký bảng điều khiển. Điều này là để kiểm tra xem dòng đó có được ghi vào tập tin hay không.
Khi đoạn mã trên được thiết lập và dự án được chạy bằng Visual Studio, bạn sẽ nhận được kết quả đầu ra bên dưới.
Đầu ra: -
Từ kết quả đầu ra, bạn có thể thấy dòng “Guru99 – ASP.Net” đã được thêm vào tệp thành công. Tất cả 3 dòng văn bản có thể được nhìn thấy trong bảng điều khiển.
Tổng kết
- Luồng được sử dụng làm cấp độ trung gian giữa ứng dụng và tệp.
- StreamReader được sử dụng bất cứ khi nào dữ liệu được yêu cầu đọc từ một tệp.
- Streamwriter được sử dụng bất cứ khi nào dữ liệu cần được ghi vào một tệp.