File I/O trong C# là gì?

Trong bài học C# trước Taimienphi.vn đã giới thiệu cho bạn về biểu thức chính quy (Regular Expression) trong C# là gì. Để tìm hiểu tiếp về file I/O trong C# là gì, bạn đọc cùng tham khảo tiếp bài viết dưới đây của Taimienphi.vn.

Xử lý file là tính năng cực kỳ quan trọng, nhất là đối với các ứng dụng doanh nghiệp. Để hỗ trợ tính năng này, Microsoft .NET Framework cung cấp namespace System.IO để cung cấp các lớp khác nhau, cho phép các nhà phát triển xử lý I/O.

file i/o trong c# la gi?

File I/O trong C# là gì?

Bên cạnh đó, namespace System.IO cũng cung cấp các tính năng hỗ trợ các thao tác với file và thư mục trong hệ thống tập tin của hệ điều hành. Trong bài viết này Taimienphi.vn sẽ giới thiệu cho bạn về File I/O trong C# là gì, cũng như cách làm việc với các lớp trong namespace System.IO để đọc và ghi dữ liệu vào các file.
 

Mục Lục bài viết:
1. Sử dụng lớp File để đọc và ghi dữ liệu.
     1.1. Đọc dữ liệu từ file.

     1.2. Ghi dữ liệu vào file.
2. Sử dụng lớp File và FileInfo để thao tác các file.

     2.1. Sử dụng lớp File để thao tác các file.
     2.2. Sử dụng lớp FileInfo để thao tác các file.
     2.3. Khởi tạo lớp FileInfo.
3. Sử dụng các lớp DirectoryInfo và Directory để thao tác các thư mục.

     3.1. Sử dụng lớp Directory để thao tác thư mục.
     3.2. Sử dụng lớp DirectoryInfo để thao tác thư mục.
     3.3. Khởi tạo lớp DirectoryInfo.

1. Sử dụng lớp File để đọc và ghi dữ liệu

Lớp File của namespace System.IO cung cấp các phương thức tĩnh khác nhau cho phép nhà phát triển thực hiện đọc và ghi file trực tiếp. Thông thường để đọc dữ liệu từ 1 file, chúng ta cần:
- Một file cần xử lý.
- Tạo một file stream.
- Chỉ định bộ đệm dữ liệu file.
- Giải phóng file đã xử lý.

1.1. Đọc dữ liệu từ file

Dưới đây là danh sách các phương thức đọc dữ liệu từ file trong C#:

- Phương thức "ReadAllText" đọc dữ liệu của file:
string filePath = @"C:\MyData\TestFile.txt";
string testData = File.ReadAllText(filePath);

- Phương thức "ReadAllLines" đọc tất cả nội dung của file và lưu trữ mỗi dòng tạo một chỉ mục mới trong mảng kiểu chuỗi:
string filePath = @"C:\MyData\TestFile.txt";
string[] testDataLineByLine = File.ReadAllLines(filePath);

- Phương thức "ReadAllBytes" đọc nội dung của file dưới dạng dữ liệu nhị phân và lưu trữ dữ liệu trong một mảng byte.
string filePath = @"C:\MyData\TestFile.txt";
byte[] testDataRawBytes = File.ReadAllBytes(filePath);

Mỗi phương thức trên cho phép nhà phát triển đọc nội dung của file và tải vào bộ nhớ. Phương thức ReadAllText cho phép nhà phát triển lưu trữ toàn bộ file trong bộ nhớ chỉ bằng một thao tác. Phương thức ReadAllLines sẽ đọc từng dòng một thành một mảng.

1.2. Ghi dữ liệu vào file

Lớp File cũng cung cấp các phương thức để ghi các loại dữ liệu khác nhau vào một file. Với mỗi loại dữ liệu mà bạn viết, lớp File cung cấp 2 phương thức.

Nếu file được chỉ định không tồn tại, phương thức Writexxx tạo một file mới với dữ liệu mới. Nếu file tồn tại thì các phương thức Writexxx sẽ ghi đè lên file hiện có với dữ liệu mới.

Nếu file được chỉ định không tồn tại, các phương thức Appendxxx cũng tạo một file mới với dữ liệu mới. Trường hợp nếu file tồn tại thì dữ liệu mới sẽ được ghi đè vào cuối file hiện có.

Dưới đây là chi tiết các phương thức ghi dữ liệu vào file:

- Phương thức "WriteAllText" cho phép các nhà phát triển ghi nội dung của biến chuỗi vào file. Nếu file tồn tại, nội dung của file sẽ bị ghi đè. Ví dụ dưới đây minh họa cách ghi nội dung của chuỗi có tên là settings vào file mới có tên settings.txt:
string filePath = @"C:\MyData\TestFile.txt";
string data = "C# Corner MVP & Microsoft MVP;";
File.WriteAllText(filePath, data);

- Phương thức
"WriteAllLines" cho phép các nhà phát triển ghi nội dung của mảng chuỗi vào file. Mỗi mục trong mảng chuỗi là một dòng mới trong file mới.string filePath = @"C:\MyData\TestFile.txt";
string[] data = { "MCT", "MCPD", "MCTS", "MCSD.NET", "MCAD.NET", "CSM" };
File.WriteAllLines(filePath, data);

- Phương thức "AppendAllText" cho phép các nhà phát triển ghi nội dung của biến chuỗi vào cuối file hiện có.
string filePath = @"C:\MyData\TestFile.txt";
string data = "Also Certified from IIT Kharagpur";
File.AppendAllText(filePath, data);

- Phương thức "AppendAllLines" cho phép các nhà phát triển ghi nội dung của mảng chuỗi vào cuối file hiện có.
string filePath = @"C:\MyData\TestFile.txt";
string[] otherData = { "Worked with Microsoft", "Lived in USA" };
File.AppendAllLines(filePath, otherData);

2. Lớp File và FileInfo để thao tác các file

Thao tác file cũng quan trọng như tạo file. Nhiều ứng dụng yêu cầu khả năng tương tác với các file được lưu trữ trên hệ thống tập tin. Ví dụ như sao chép một file từ thư mục này sang thư mục khác để xử lý.

Bằng cách sử dụng các lớp File và FileInfo, các nhà phát triển có thể thực hiện được điều này.

2.1. Sử dụng lớp File để thao tác các file

Lớp File bao gồm các phương thức tĩnh khác nhau mà các nhà phát triển có thể sử dụng để thực hiện thao tác file cơ bản. Dưới đây là chi tiết một số phương thức sử dụng lớp File để thao tác các file:

- Phương thức "Copy" cho phép các nhà phát triển sap chép file hiện có vào vị trí thư mục khác trên hệ thống tập tin.
string sourceFilePath = @"C:\MyData\TestFile.txt";
string destinationFilePath = @"C:\temp\Data.txt";
bool overWrite = true;
File.Copy(sourceFilePath, destinationFilePath, overWrite);

Lưu ý: Tham số ghi đè được truyền cho lệnh gọi phương thức Copy, cho biết quá trình sao chép sẽ ghi đè lên file hiện có nếu nó tồn tại ở đường dẫn đích. Nếu truyền sai lệnh gọi phương thức Copy và file đã tồn tại, sau đó Common Language Runtime (CLR) sẽ ném ngoại lệ System.IO.IOException.

- Phương thức "Delete" xóa một file hiện có khỏi hệ thống tập tin.
string sourceFilePath = @"C:\MyData\TestFile.txt";
File.Delete(sourceFilePath);

- Phương thức "Exists" kiểm tra xem file có tồn tại trên hệ thống tập tin hay không.
string sourceFilePath = @"C:\MyData\TestFile.txt";
bool doesFileExist = File.Exists(sourceFilePath);

- Phương thức "GetCreationTime" chứa date time stamp mô tả khi file được tạo từ siêu dữ liệu (metadata) được liên kết với file.
string sourceFilePath = @"C:\MyData\TestFile.txt";
DateTime fileCreatedOn = File.GetCreationTime(sourceFilePath)

2.2. Sử dụng lớp FileInfo để thao tác các file

Không giống như lớp File, lớp FileInfo cung cấp các thành viên biến thể mà bạn có thể sử dụng để thao tác các file hiện có. Nếu lớp File cung cấp các phương thức tĩnh để thao tác trực tiếp, lớp FileInfo hoạt động như biểu diễn bộ nhớ vật lý của file.

2.3. Khởi tạo lớp FileInfo

string sourceFilePath = @"C:\MyData\TestFile.txt";
FileInfo fInfo = new FileInfo(sourceFilePath);

Sau khi biến thể của lớp FileInfo được tạo, bạn có thể sử dụng các thuộc tính và phương thức để tương tác với file. Dưới đây là danh sách chi tiết các thuộc tính và phương thức khởi tạo lớp FileInfo:

- Phương thức "CopyTo" cho phép các nhà phát triển sao chép file hiện có vào thư mục khác trên hệ thống tập tin.
string sourceFilePath = @"C:\MyData\TestFile.txt";
string destinationFilePath = @"C:\temp\Data.txt";
bool overwrite = true;
FileInfo fInfo = new FileInfo(sourceFilePath);
fInfo.CopyTo(destinationFilePath, overwrite);

Lưu ý: Tham số ghi đè trong phương thức CopyTo cho biết quá trình sao chép sẽ ghi đè lên file hiện có nếu file tồn tại ở đường dẫn file đích đã chỉ định. Nếu truyền sai phương thức CopyTo và file đã tồn tại, CLR sẽ ném ngoại lệ System.IO.IOException.

- Phương thức "Delete" cho phép xóa một file.
string sourceFilePath = @"C:\MyData\TestFile.txt";
FileInfo fInfo = new FileInfo(sourceFilePath);
fInfo.Delete();

- Thuộc tính "DirectoryName" cho phép lấy đường dẫn thư mục đến file.
string sourceFilePath = @"C:\MyData\TestFile.txt";
FileInfo fInfo = new FileInfo(sourceFilePath);
string directoryPath = fInfo.DirectoryName;
// returns C:\MyData

- Phương thức "Exists" cho phép các nhà phát triển xác định xem file được chỉ định có tồn tại trong hệ thống tập tin hay không.
string sourceFilePath = @"C:\MyData\TestFile.txt";
FileInfo fInfo = new FileInfo(sourceFilePath);
bool filesExists = fInfo.Exists;

- Thuộc tính "Extension" cho phép lấy phần đuôi mở rộng của file.
string sourceFilePath = @"C:\MyData\TestFile.txt";
FileInfo fInfo = new FileInfo(sourceFilePath);
bool filesExtn = fInfo.Extension;

- Thuộc tính "Length" cho phép các nhà phát triển lấy độ dài của file theo byte.
string sourceFilePath = @"C:\MyData\TestFile.txt";
FileInfo fInfo = new FileInfo(sourceFilePath);
long length = fInfo.Length;

3. Lớp DirectoryInfo và Directory để thao tác thư mục

Trong hệ thống tập tin của hệ điều hành, các file được sắp xếp và nhóm trong các thư mục. Vì vậy việc tương tác và thao tác cấu trúc thư mục của hệ thống tập tin là cực kỳ quan trọng.

Tương tác với các thư mục bao gồm kiểm tra xem thư mục có tồn tại trước khi ghi file hoặc xóa thư mục sau khi quá trình hoàn tất. Thư viện lớp .NET Framework cung cấp các lớp Directory và DirectoryInfo để thực hiện các hoạt động này.

3.1. Sử dụng lớp Directory để thao tác thư mục

Tương tự như lớp File, lớp Directory cung cấp các phương thức tĩnh cho phép bạn tương tác với các thư mục mà không cần khởi tạo đối tượng liên quan đến thư mục trong mã.

- Phương thức "CreateDirectory" tạo thư mục mới trên hệ thống tập tin.
string sourceDirPath = @"C:\MyData\Data";
Directory.CreateDirectory(sourceDirPath);

- Phương thức "Delete" xóa thư mục tại đường dẫn cụ thể.
string sourceDirPath = @"C:\MyData\Data";
bool deleteRecursively = true;
Directory.Delete(sourceDirPath, deleteRecursively);

Lưu ý: Tham số deleteRecursively được truyền vào phương thức Delete để chỉ định xem có nên xóa bất kỳ nội dung nào có thể tồn tại trong thư mục này hay không. Nếu truyền sai vào phương thức Delete và thư mục không trống, sau đó CLR sẽ ném ngoại lệ System.IO.IOException.

- Phương thức "Exists" xác định xem thư mục có tồn tại trên hệ thống tập tin hay không.
string sourceDirPath = @"C:\MyData\Data";
bool tempDataDirectoryExists = Directory.Exists(sourceDirPath);

- Phương thức "GetDirectories" nhận danh sách tất cả các thư mục con trong một thư mục cụ thể trên hệ thống tập tin.
string sourceDirPath = @"C:\MyData\Data";
string[] subDirectories = Directory.GetDirectories(sourceDirPath);

- Phương thức "GetFiles" nhận danh sách tất cả các file trong một thư mục cụ thể trên hệ thống tập tin.
string sourceDirPath = @"C:\MyData\Data";
string[] files = Directory.GetFiles(sourceDirPath);
Lớp DirectoryInfo cung cấp các biến thể thành viên, cho phép bạn truy cập siêu dữ liệu thư mục và thao tác cấu trúc thư mục.

3.2. Sử dụng lớp DirectoryInfo để thao tác thư mục

Lớp DirectoryInfo hoạt động như một đại diện trong bộ nhớ thư mục. Trước khi truy cập các thuộc tính và thực thi các phương thức của lớp DirectoryInfo, chúng ta phải tạo một biến thể của lớp.

3.3. Khởi tạo lớp DirectoryInfo

string sourceDirPath = @"C:\MyData\Data";
DirectoryInfo directory = new DirectoryInfo(sourceDirPath);

Khi tạo một biến thể của lớp DirectoryInfo, bạn có thể sử dụng các thuộc tính và phương thức của nó để tương tác với thư mục. Dưới đây là thông tin chi tiết mô tả một số thuộc tính và phương thức khởi tạo lớp DirectoryInfo:

- Phương thức "Create" tạo một thư mục mới trên hệ thống tập tin.
string sourceDirPath = @"C:\MyData\Data";
DirectoryInfo directory = new DirectoryInfo(sourceDirPath);
directory.Create();

- Phương thức "Delete" xóa thư mục tại đường dẫn cụ thể.
string sourceDirPath = @"C:\MyData\Data";
bool deleteRecursively = true;
DirectoryInfo directory = new DirectoryInfo(sourceDirPath);
directory.Delete(deleteRecursively);

Lưu ý: Tham số ecursivelyDeleteSubContent được truyền cho lệnh gọi phương thức Delete, cho biết quá trình xóa có nên xóa các nội dung tồn tại trong thư mục hay không. Nếu truyền sai lệnh vào phương thức Delete, và thư mục không trống, sau đó CLR sẽ ném ngoại lệ System.IO.IOException.

- Phương thức "Exists" xác định xem thư mục có tồn tại trên hệ thống tập tin hay không.
string sourceDirPath = @"C:\MyData\Data";
DirectoryInfo directory = new DirectoryInfo(sourceDirPath);
bool directoryExists = directory.Exists

- Thuộc tính "FullName" lấy đường dẫn đầy đủ đến thư mục. Ví dụ dưới đây minh họa cách để lấy đường dẫn đầy đủ đến thư mục tempData.
string sourceDirPath = @"C:\MyData\Data";
DirectoryInfo directory = new DirectoryInfo(sourceDirPath);
string fullPath = directory.FullName;

- Phương thức "GetDirectories" lấy danh sách tất cả các thư mục con trong thư mục cụ thể trên hệ thống tập tin. Ngược lại với phương thức tĩnh File.GetDirectories, phương thức biến thể này trả về mảng kiểu DirectoryInfo, phép bạn sử dụng từng thuộc tính biến thể cho mỗi thư mục con.
string sourceDirPath = @"C:\MyData\Data";
DirectoryInfo directory = new DirectoryInfo(sourceDirPath);
DirectoryInfo[] subDirectories = directory.GetDirectories();

- Phương thức "GetFiles" lấy danh sách tất cả các file trong thư mục cụ thể trên hệ thống tập tin. Ngược lại với phương thức tĩnh File.GetFiles phương thức biến thể này trả về mảng kiểu FileInfo, cho phép bạn sử dụng từng thuộc tính biến thể cho mỗi file.
string sourceDirPath = @"C:\MyData\Data";
DirectoryInfo directory = new DirectoryInfo(sourceDirPath);
FileInfo[] subFiles = directory.GetFiles();

Tùy thuộc vào yêu cầu các tiếp cận từng dòng mã đơn giản để thao tác một thư mục, lớp Directory Directory hoặc lớp DirectoryInfo sẽ đáp ứng các yêu cầu của bạn.

https://thuthuat.taimienphi.vn/file-i-o-trong-c-la-gi-43871n.aspx
Bài viết trên đây Taimienphi. vn vừa giới thiệu cho bạn về file I/O trong C# là gì. Nếu có bất kỳ thắc mắc hoặc câu hỏi nào cần giải đáp, bạn đọc có thể để lại ý kiến của mình trong phần bình luận bên dưới bài viết nhé. Ngoài ra bạn đọc có thể tham khảo thêm một số bài viết đã có trên Taimienphi.vn để tìm hiểu thêm về xử lý ngoại lệ trong C# như thế nào nhé.

Tác giả: Chipu     (4.0★- 3 đánh giá)  ĐG của bạn?

  

Bài viết liên quan

Bloodshed Dev C++ - Hướng dẫn thực thi, biên dịch
Comment trong C++
Enum trong C# là gì? Cú pháp và cách khởi tạo
Con trỏ (pointer) trong C
Mảng (array) trong C#
Từ khoá liên quan:

file i o trong c la gi

, File I/O trong C# là gì, học C#,

SOFT LIÊN QUAN
  • Lập trình C++

    Giáo trình lập trình C++

    Lập trình C++ là tài liệu hướng dẫn học lập trình C++ - ngôn ngữ lập trình hướng đối tượng mở rộng từ ngôn ngữ C, cung cấp đến bạn các kiến thức về cách thức và tư duy lập trình. Đây là tài liệu rất hữu ích cho những ai ...

Tin Mới