Trong các hoạt động tệp C #, thông thường các luồ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 được sử dụng để đảm bảo các hoạt động đọc và ghi vào tệp diễn ra suôn sẻ.
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 luồng, dữ liệu từ các tệp lớn được chia thành các phần nhỏ và được gửi đến luồng. Các phần dữ liệu này sau đó có thể được đọc từ ứng dụng.
Lý do chia nhỏ nó thành nhiều phần nhỏ là do tác động 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ừ tệp 100 MB ngay lập tức, ứng dụng của bạn có thể bị treo và trở nên không ổn định. Sau đó, cách tiếp cận tốt nhất là sử dụng các luồng để chia nhỏ tệp thành các phần có thể quản lý được.
Vì vậy, khi một thao tác ghi được thực hiện trên tệp, dữ liệu được 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à ghi bằng cách sử dụng các luồng.
Trong hướng dẫn này, bạn sẽ học-
- Trình đọc luồng
- Người viết luồng
Trình đọc luồng
Trình đọc luồng được sử dụng để đọc dữ liệu từ tệp bằng luồng. Dữ liệu từ tệp lần đầu tiên được đọc vào luồng. Sau đó, ứng dụng đọc dữ liệu từ luồng.
Đối với 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 ổ đĩa D có tên là Example.txt. Tập tin sẽ là một tập tin văn bản đơn giản và có 2 dòng như hình dưới đây
- Guru99 - .Net
- Guru99 -C #
Đối với 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 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();}}}
Giải thích mã: -
- Đầu tiên, chúng tôi đang khai báo một đối tượng trình đọ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. File.OpenText được sử dụng để mở tệp "Example.txt" ở chế độ chỉ đọc. Trình xử lý tệp sau đó được gửi đến đối tượng trình đọc luồng.
- Tiếp theo, chúng tôi đang xác định một 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 ta thực hiện thao tác này, đầu tiên mỗi dòng sẽ được chuyển từ tệp vào bộ đệm. Sau đó, dòng chuỗi sẽ được chuyển từ bộ đệm sang biến 's'. Sau đó, chúng tôi 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 Visual Studio, bạn sẽ nhận được kết quả bên dưới.
Đầ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 đọc từ luồng được gửi đến 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 cách sử dụ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 các luồng để ghi dữ liệu từ một tệp. Nhập mã dưới đây vào tệp 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 (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 tôi đang khai báo một đối tượng người viết luồng. Đối tượng người viết luồng được sử dụng trong C # để định nghĩa một 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 vào 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ế độ nối thêm. Trình xử lý tệp sau đó được gửi đến đối tượng trình ghi luồng.
- Chúng tôi đang sử dụng phương pháp ghi luồng Writeline để ghi dòng "Guru99 - ASP.Net" vào luồng. Từ luồng, dòng sau đó 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 yêu cầu cho mục đích ghi.
- Cuối cùng, chúng tôi đang đọ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 liệu dòng đã được ghi vào tệp hay chưa.
Khi mã trên được đặt và dự án được chạy bằng Visual Studio, bạn sẽ nhận được kết quả bên dưới.
Đầu ra: -
Từ đầ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óm lược
- Các luồng được sử dụng như một 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 tệp.