Cấp bậc tác giả:

DOTNET

Sử dụng I/O để đọc và ghi dữ liệu tập tin

Được viết bởi QuangIT ngày 11/01/2014 lúc 11:28 AM
Trong bài viết này, bạn sẽ được học cách làm việc với các lớp trong không gian tên System.IO để đọc và ghi dữ liệu tập tin.
  • 0
  • 18495

Sử dụng I/O để đọc và ghi dữ liệu tập tin

Xử lý tập tin là tính năng rất quan trọng đối với nhiều ứng dụng. Để hỗ trợ tính năng này Microsoft. NET Framework cung cấp không gian tên System.IO, cung cấp các lớp khác nhau để cho phép các nhà phát triển sử dụng I/O. 
Không gian tên System.IO cung cấp tính năng hỗ trợ thao tác các tập tin và thư mục của hệ thống tập tin trên hệ điều hành. 

Mục tiêu
  • Sử dụng lớp File để đọc và ghi dữ liệu.
  • Sử dụng lớp File và FileInfo để thao tác tập tin.
  • Sử dụng lớp DirectoryInfo và Directory để thao tác thư mục.
Sử dụng lớp File để đọc và ghi dữ liệu. 
Lớp FIle của không gian tên System.IO cung cấp phương pháp tĩnh cho phép đọc và ghi trực tiếp vào văn bản của tập tin. Thông thường, để đọc dữ liệu từ tập tin, bạn sẽ thực hiện như sau:

Tìm đến tập tin cần xử lý.
  • Mở luồng vào tập tin.
  • Đệm dữ liệu tập tin vào bộ nhớ.
  • Làm lại cách tổ chức tập tin xử lý để thực hiện lại.
Đọc dữ liệu từ tập tin
Danh sách sau đây mô tả một số các phương thức:
  • Phương thức "ReadAllText" đọc dữ liệu tập tin.
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 tập tin và lưu trữ mỗi dòng tại chỉ số mới trong mảng kiểu string.
string filePath = @"C:\MyData\TestFile.txt";
string[] testDataLineByLine = File.ReadAllLines(filePath);
  • Phương thức "ReadAllBytes" đọc nội dung của tập tin như dữ liệu nhị phân và lưu trữ các dữ liệu trong mảng byte. 
string filePath = @"C:\MyData\TestFile.txt";
byte[] testDataRawBytes = File.ReadAllBytes(filePath);
Mỗi phương thức cho phép nhà phát triển đọc nội dung của tập tin và tải vào bộ nhớ. Phương thức ReadAllText sẽ cho phép nhà phát triển cache toàn bộ tập tin trong bộ nhớ. Trong khi đó, phương thức ReadAllLines sẽ đọc dòng-by-line vào mảng. 

Ghi dữ liệu đến tập tin 

Lớp File cung cấp các phương thức để viết các kiểu dữ liệu vào tập tin. Đối với mỗi kiểu dữ liệu bạn có thể ghi, lớp File cung cấp hai phương thức.

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

Nếu tập tin được chỉ định không tồn tại thì phương thức Appendxxx cũng tạo ra tập tin mới với dữ liệu mới.

Tuy nhiên, nếu tập tin không tồn tại thì dữ liệu mới được ghi vào cuối tập tin hiện tại 

Danh sách sau đây mô tả một số phương thức:
  • Phương thức "WriteAllText" cho phép nhà phát triển ghi nội dung của biến chuỗi thành tập tin. Nếu tập tin tồn tại, nội dung của nó sẽ được ghi đè. Ví dụ mã sau cho thấy cách viết nội dung của chuỗi các thiết lập tên vào tập tin 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 nhà phát triển ghi nội dung của mảng chuỗi vào tập tin. Mỗi mục trong mảng chuỗi sẽ là dòng mới trong tập tin 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 nhà phát triển viết nội dung của biến chuỗi vào cuối tập tin hiện có. 
string filePath = @"C:\MyData\TestFile.txt";
string data = "DOTNET GROUP - Chuyên phát triển và đào tạo nguồn nhân lực .NET";
File.AppendAllText(filePath, data);
  • Phương thức "AppendAllLines" cho phép nhà phát triển ghi nội dung của mảng chuỗi đến cuối tập tin hiện có. 
string filePath = @"C:\MyData\TestFile.txt";
string[] otherData = { "DOTNET GROUP - Công nghệ .NET", "Chia sẻ và kết nối" };
File.WriteAllLines(filePath, otherData);
Lớp FIle và FileInfo thao tác tập tin

Thao tác với file cũng quan trọng như việc tạo ra tập tin. Nhiều ứng dụng thường đòi hỏi khả năng tương tác với tập tin được lưu trữ trên hệ thống tập tin. Ví dụ, sao chép tập tin từ thư mục đến vị trí khác để xử lý tiếp. Có thể thực thi kiểu của chức năng bằng cách sử dụng Lớp File và FileInfo. 

Sử dụng lớp File để thao tác tập tin 
Lớp File bao gồm các phương thức tĩnh khác nhau mà một nhà phát triển có thể sử dụng để thực hiện thao tác với file cơ bản. Danh sách sau đây mô tả các phương thức đó. 
  • Phương thức "Copy" cho phép nhà phát triển sao chép tập tin hiện có đến 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 ý: Các thông số ghi đè thông qua gọi phương thức Copy chỉ ra rằng quá trình sao chép nên ghi đè lên tập tin hiện tại nếu nó tồn tại ở đường dẫn đích. Nếu bạn gọi sai phương thức Copy, và tập tin đã tồn tại thì Common Language Runtime (CLR) sẽ ném một System.IO.IOException.
  • Phương thức "Delete" xóa tập tin hiện có từ hệ thống tập tin.
string sourceFilePath = @"C:\MyData\TestFile.txt";
File.Delete(sourceFilePath);
  • Phương thức "Exists" kiểm tra xem tập tin tồn tại trên hệ thống tập tin. 
string sourceFilePath = @"C:\MyData\TestFile.txt";
bool doesFileExist = File.Exists(sourceFilePath);
  • Phương thức "GetCreationTime" có được thời gian tại lúc đó mô tả tập tin được tạo ra, từ các siêu dữ liệu liên quan đến tập tin. 
string sourceFilePath = @"C:\MyData\TestFile.txt";
DateTime fileCreatedOn = File.GetCreationTime(sourceFilePath);
Sử dụng Lớp FileInfo để thao tác tập tin

Không giống như lớp File, lớp FileInfo cung cấp các thành phần thể hiện bạn có thể sử dụng để thao tác tập tin hiện có. Cũng trái ngược với lớp File cung cấp phương thức tĩnh cho thao tác trực tiếp, lớp FileInfo hoạt động như đại diện trong bộ nhớ của tập tin vật lý. 

Instantiating Class FileInfo
string sourceFilePath = @"C:\MyData\TestFile.txt";
FileInfo fInfo = new FileInfo(sourceFilePath);
Sau khi thể hiện lớp FileInfo được tạo ra, bạn có thể sử dụng thuộc tính và phương thức để tương tác với tập tin. Danh sách sau đây mô tả một số thuộc tính và phương thức.
  • Phương thức "CopyTo" cho phép nhà phát triển sao chép tập tin hiện có vào thư mục khác nhau 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 ý: Các thông số ghi đè trong phương thức CopyTo chỉ ra rằng quá trình sao chép nên ghi đè lên tập tin hiện tại nếu nó tồn tại ở đường dẫn tập tin quy định. Nếu phương thức CopyTo sai, và tập tin đã tồn tại thì CLR sẽ ném một System.IO.IOException.
  • Phương thức "Delete" cho phép các nhà phát triển xóa tập tin. 
string sourceFilePath = @"C:\MyData\TestFile.txt";
FileInfo fInfo = new FileInfo(sourceFilePath);
fInfo.Delete();
  • Thuộc tính "directoryname" cho phép nhà phát triển có được đường dẫn thư mục đến tập tin.
string sourceFilePath = @"C:\MyData\TestFile.txt";
FileInfo fInfo = new FileInfo(sourceFilePath);
string directoryPath = fInfo.DirectoryName; 
// returns C:\MyData
  • Phương thức "Exist" cho phép nhà phát triển xác định xem file nào đó tồn tại trong hệ thống tập tin. 
string sourceFilePath = @"C:\MyData\TestFile.txt";
FileInfo fInfo = new FileInfo(sourceFilePath);
bool filesExists = fInfo.Exists;
  • Thuộc tính "Extension" cho phép có được những tập tin mở rộng của tập tin. 
string sourceFilePath = @"C:\MyData\TestFile.txt";
FileInfo fInfo = new FileInfo(sourceFilePath);
bool filesExtn = fInfo.Extension;
  • Thuộc tính "Length" cho phép nhà phát triển có được chiều dài của tập tin trong byte. 
string sourceFilePath = @"C:\MyData\TestFile.txt";
FileInfo fInfo = new FileInfo(sourceFilePath);
long length = fInfo.Length;
Lớp DirectoryInfo và Directory thao tác Thư mục

Trong hệ thống tập tin trên hệ điều hành, các tập tin được tổ chức thành các thư mục. Do đó, nó rất quan trọng cho ứng dụng để tương tác và vận dụng cấu trúc thư mục hệ thống tập tin. Tương tác với các thư mục bao gồm kiểm tra thư mục tồn tại trước khi ghi tập tin hoặc thư mục để loại bỏ sau khi quá trình hoàn tất như chính sách dọn dẹp của .NET Framework. Cung cấp các lớp Directory và DirectoryInfo cho các hoạt động như vậy. 

Sử dụng lớp Directory để thao tác nhiều thư mục 

Tương tự như lớp File, lớp "Directory" cung cấp phương thức tĩnh cho phép tương tác với các thư mục, mà không instantiating một đối tượng thư mục liên quan đến trong mã của bạn.
  • Phương thức "CreateDirectory" tạo ra 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 ý: Các tham số deleteRecursively thông qua phương thức Delete xác định xem quá trình xóa nên xóa bất kỳ nội dung nào có thể tồn tại trong thư mục. Nếu phương thức Delete sai, và thư mục không rỗng thì CLR sẽ ném một System.IO.IOException. 
  • Phương thức "Exist" xác định nếu thư mục tồn tại trên hệ thống tập tin. 
string sourceDirPath = @"C:\MyData\Data";
bool tempDataDirectoryExists = Directory.Exists(sourceDirPath);
  • 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. 
string sourceDirPath = @"C:\MyData\Data";
string[] subDirectories = Directory.GetDirectories(sourceDirPath);
  • Phương thức "GetFiles" lấy danh sách tất cả các tập tin trong thư mục cụ thể trên hệ thống tập tin. 
string sourceDirPath = @"C:\MyData\Data";
string[] files = Directory.GetFiles(sourceDirPath);
  • Phương thức "DirectoryInfo" cung cấp các thành phần thể hiện bạn truy cập vào thư mục siêu dữ liệu và thao tác cấu trúc thư mục. 
Sử dụng lớp DirectoryInfo để thao tác nhiều thư mục. 

Lớp "DirectoryInfo" hoạt động như đại diện trong bộ nhớ của thư mục. Trước khi bạn có thể truy cập thuộc tính và thực hiện phương thức của lớp DirectoryInfo, bạn phải tạo thể hiện của lớp. Instantiating lớp DirectoryInfo 
string sourceDirPath = @"C:\MyData\Data";
DirectoryInfo directory = new DirectoryInfo(sourceDirPath);
Khi bạn đã tạo ra thể hiện của lớp DirectoryInfo, bạn có thể sử dụng thuộc tính và phương thức của nó tương tác với các thư mục. Danh sách sau đây mô tả một số thuộc tính và phương thức:
  • Phương thức "Create" tạo ra 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ố recursivelyDeleteSubContent truyền cho phương thức Delete chỉ ra quá trình xóa nên xóa bất kỳ nội dung nào có thể tồn tại trong thư mục. Nếu gọi phương thức Delete sai, và thư mục không rỗng thì CLR sẽ ném một System.IO.IOException.
  • Thuộc tính "Exists" xác định nếu thư mục tồn tại trên hệ thống tập tin.
string sourceDirPath = @"C:\MyData\Data";
DirectoryInfo directory = new DirectoryInfo(sourceDirPath);
bool directoryExists = directory.Exists
  • Thuộc tính "FullName" lấy được đường dẫn đầy đủ đến thư mục. Ví dụ sau đây cho thấy làm thế nào để 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ể về hệ thống tập tin. Ngược lại với các phương thức File.GetDirectories tĩnh, phương thức này trả về mảng kiểu DirectoryInfo, cho phép bạn sử dụng mỗi thuộc tính instance 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 tập tin trong thư mục cụ thể trên hệ thống tập tin. Ngược lại với phương thức File.GetFiles tĩnh, phương thức này trả về mảng kiểu FileInfo, cho phép bạn sử dụng thuộc tính instance cho mỗi tập tin
string sourceDirPath = @"C:\MyData\Data";
DirectoryInfo directory = new DirectoryInfo(sourceDirPath);
FileInfo[] subFiles = directory.GetFiles();

Tùy thuộc vào việc bạn cần phương thức đơn giản nào bên trong code để thao tác thư mục.

Nguồn bài viết: DOTNET.VN

BÌNH LUẬN BÀI VIẾT

Bài viết mới nhất

LIKE BOX

Bài viết được xem nhiều nhất

HỌC HTML