File I/O trong C#

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 streamOutput 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à:

  • Append: Mở một file đã có và đặt con trỏ tại phần cuối của file, hoặc tạo File, nếu file đó chưa tồn tại.

  • Create: Tạo một file mới.

  • CreateNew: Xác định với hệ điều hành rằng nó sẽ tạo một file mới.

  • Open: Mở một file đang tồn tại.

  • OpenOrCreate: Xác định với hệ điều hành rằng nó sẽ mở một file nếu nó tồn tại, nếu không thì nó sẽ tạo một file mới.

  • Truncate: Mở một file đang tồn tại và truncate (cắt) kích cỡ của nó về 0 byte.

FileAccess

FileAccess enumerators có các thành viên là: Read, ReadWriteWrite.

FileShare

FileShare enumerators có các thành viên sau:

  • Inheritable: Cho phép một file truyền tính kế thừa tới các tiến trình con.

  • None: Từ chối việc chia sẻ file hiện tại.

  • Read: Cho phép mở file để đọc.

  • ReadWrite: Cho phép mở file để đọc và ghi.

  • Write: Cho phép mở file để ghi.

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#

Thứ Bảy, 28/07/2018 17:14
32 👨 798