Một file là một tập hợp dữ liệu được lưu trữ trên ổ đĩa với một tên cụ thể và một đường dẫn (path) thư mục. Khi một file được mở để đọc hoặc ghi, nó trở thành một luồng (stream).
Về cơ bản, stream là dãy các byte truyền qua path. Có hai stream quan trọng: Input stream và Output stream. Input stream được sử dụng để đọc dữ liệu từ file (hành động read) và Output stream được sử dụng để ghi vào trong file (hành động write).
Các lớp I/O trong C#
Namespace System.IO có nhiều lớp khác nhau, được sử dụng để thực hiện những thao tác với file, như tạo và xóa file, đọc và ghi một file, đóng một file…
Bảng sau hiển thị một số lớp non-abstract được sử dụng phổ biến trong namespace System.IO trong C#:
I/O Class | Mô tả |
BinaryReader | Đọc dữ liệu gốc (primitive data) từ một luồng nhị phân (binary stream). |
BinaryWriter | Ghi dữ liệu gốc trong định dạng nhị phân. |
BufferedStream | Bộ nhớ tạm thời cho các byte của một stream. |
Directory | Giúp điều khiển cấu trúc thư mục. |
DirectoryInfo | Dùng để thực hiện các hoạt động trên các thư mục. |
DriveInfo | Cung cấp thông tin cho các ổ đĩa (drive). |
File | Giúp ích trong việc thao tác các file. |
FileInfo | Dùng để thực hiện các hoạt động trên file. |
FileStream | Dùng để đọc và ghi bất kỳ vị trí nào trong một file. |
MemoryStream | Dùng để truy cập ngẫu nhiên tới stream được lưu trữ trong bộ nhớ. |
Path | Thực hiện các hoạt động trên thông tin path. |
StreamReader | Dùng để đọc các ký tự từ một byte stream. |
StreamWriter | Dùng để ghi các ký tự tới một stream. |
StringReader | Dùng để đọc từ một bộ đệm chuỗi (string buffer). |
StringWriter | Dùng để ghi vào một string buffer. |
Lớp FileStream trong C#
Lớp FileStream trong namespace System.IO trong C# giúp đọc, ghi và đóng các File. Lớp này dẫn xuất từ lớp abstract là Stream.
Bạn cần tạo một đối tượng FileStream để tạo một file mới hoặc mở một file đang tồn tại. Cú pháp để tạo một đối tượng FileStream trong C# như sau:
FileStream <tên_đối_tượng> = new FileStream( <tên_file>, <FileMode Enumerator>,
<FileAccess Enumerator>, <FileShare Enumerator>);
Ví dụ: Tạo một đối tượng FileStream là F để đọc một file với tên vidu.txt, như sau:
FileStream F = new FileStream("vidu.txt", FileMode.Open, FileAccess.Read,
FileShare.Read);
Tham số | Mô tả |
---|---|
FileMode | FileMode enumerator định nghĩa các phương thức khác nhau để mở file. Các thành viên của FileMode enumerator là:
|
FileAccess | FileAccess enumerators có các thành viên là: Read, ReadWrite và Write. |
FileShare | FileShare enumerators có các thành viên sau:
|
Ví dụ:
Dưới đây là ví dụ minh họa cách sử dụng của lớp FileStream trong C#:
using System; using System.IO; namespace VdIO { class Program { static void Main(string[] args) { FileStream F = new FileStream("test.dat", FileMode.OpenOrCreate, FileAccess.ReadWrite); for (int i = 1; i <= 20; i++) { F.WriteByte((byte)i); } F.Position = 0; for (int i = 0; i <= 20; i++) { Console.Write(F.ReadByte() + " "); } F.Close(); Console.ReadKey(); } } }
Sử dụng lệnh Console.ReadKey(); để nhìn kết quả một cách rõ ràng hơn. Biên dịch và chạy chương trình C# trên sẽ cho kết quả sau:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 -1
Hoạt động file nâng cao trong C#
Ví dụ trước minh họa các hoạt động đơn giản trên file trong C#. Tuy nhiên, để lợi dụng tối đa sức mạnh của các lớp System.IO trong C#, bạn cần biết các thuộc tính và phương thức được sử dụng phổ biến về các lớp này.
- Đọc và ghi file văn bản: Lớp StreamReader và StreamWriter giúp thực hiện việc đọc và ghi các file văn bản.
- Đọc và ghi file nhị phân: Lớp BinaryReader và BinaryWriter giúp thực hiện việc đọc và ghi các file nhị phân.
- Thao tác Windows file system: Nó cung cấp cho lập trình viên C# khả năng duyệt và xác định vị trí các file và thư mục trong Windows.
Theo tutorialspoint
Bài trước: Xử lý ngoại lệ (Try/Catch/Finally) trong C#
Bài tiếp: Attribute trong C#