在軟件開發中,文件操作(I/O)是一項基本且重要的功能。無論是讀取配置文件、存儲用戶數據,還是處理日志文件,C# 都提供了豐富的 API 來高效地進行文件讀寫操作。本文將全面介紹 C# 中的文件 I/O 操作,涵蓋基礎文件操作、文本/二進制文件讀寫、流式處理、異步 I/O 以及最佳實踐,幫助開發者掌握文件處理的技巧。
1. C# 文件操作基礎
C# 的文件操作主要依賴于?System.IO
?命名空間,其中?File
、Directory
、StreamReader
、StreamWriter
?等類是核心工具。
1.1 檢查文件是否存在
在操作文件之前,通常需要檢查文件是否存在:
string filePath = @"C:\example\test.txt";
if (File.Exists(filePath))
{Console.WriteLine("文件存在");
}
else
{Console.WriteLine("文件不存在");
}
1.2 創建、刪除和移動文件
-
創建文件:
File.Create(@"C:\example\newfile.txt");
-
刪除文件:
File.Delete(@"C:\example\oldfile.txt");
-
移動/重命名文件:
File.Move(@"C:\example\oldname.txt", @"C:\example\newname.txt");
-
復制文件:
File.Copy(@"C:\example\source.txt", @"C:\example\destination.txt");
2. 文本文件的讀寫
2.1 讀取文本文件
C# 提供了多種讀取文本文件的方式:
-
File.ReadAllText
(讀取整個文件):string content = File.ReadAllText(filePath); Console.WriteLine(content);
-
File.ReadAllLines
(逐行讀取):string[] lines = File.ReadAllLines(filePath); foreach (string line in lines) {Console.WriteLine(line); }
-
StreamReader
(流式讀取,適合大文件):using (StreamReader reader = new StreamReader(filePath)) {string line;while ((line = reader.ReadLine()) != null){Console.WriteLine(line);} }
?
2.2 寫入文本文件
-
File.WriteAllText
(覆蓋寫入):File.WriteAllText(filePath, "Hello, World!");
-
File.AppendAllText
(追加寫入):File.AppendAllText(filePath, "\nThis is a new line.");
-
StreamWriter
(流式寫入):using (StreamWriter writer = new StreamWriter(filePath)) {writer.WriteLine("Line 1");writer.WriteLine("Line 2"); }
3. 二進制文件的讀寫
二進制文件(如圖片、音頻、數據庫文件)需要使用?BinaryReader
?和?BinaryWriter
。
3.1 寫入二進制文件
using (BinaryWriter writer = new BinaryWriter(File.Open(filePath, FileMode.Create)))
{writer.Write(100); // 寫入整數writer.Write(3.14); // 寫入雙精度浮點數writer.Write("Hello"); // 寫入字符串
}
3.2 讀取二進制文件
using (BinaryReader reader = new BinaryReader(File.Open(filePath, FileMode.Open)))
{int number = reader.ReadInt32();double pi = reader.ReadDouble();string text = reader.ReadString();Console.WriteLine($"Number: {number}, Pi: {pi}, Text: {text}");
}
4. 文件流(FileStream)
FileStream
?提供了更底層的文件訪問方式,適用于大文件或需要精細控制的情況。
4.1 使用 FileStream 讀寫文件
// 寫入文件
using (FileStream fs = new FileStream(filePath, FileMode.Create))
{byte[] data = Encoding.UTF8.GetBytes("Hello, FileStream!");fs.Write(data, 0, data.Length);
}// 讀取文件
using (FileStream fs = new FileStream(filePath, FileMode.Open))
{byte[] buffer = new byte[1024];int bytesRead = fs.Read(buffer, 0, buffer.Length);string content = Encoding.UTF8.GetString(buffer, 0, bytesRead);Console.WriteLine(content);
}
5. 目錄操作
除了文件操作,C# 還提供了目錄管理功能:
5.1 創建和刪除目錄
string dirPath = @"C:\example\newfolder";// 創建目錄
Directory.CreateDirectory(dirPath);// 刪除目錄(recursive: true 表示刪除非空目錄)
Directory.Delete(dirPath, recursive: true);
5.2 遍歷目錄
// 獲取所有文件
string[] files = Directory.GetFiles(dirPath);
foreach (string file in files)
{Console.WriteLine(file);
}// 獲取所有子目錄
string[] subDirs = Directory.GetDirectories(dirPath);
foreach (string dir in subDirs)
{Console.WriteLine(dir);
}
6. 異步文件操作
異步 I/O 可以提高程序性能,特別是在處理大文件時。
6.1 異步讀取文件
async Task<string> ReadFileAsync(string path)
{using (StreamReader reader = new StreamReader(path)){return await reader.ReadToEndAsync();}
}
6.2 異步寫入文件
async Task WriteFileAsync(string path, string content)
{using (StreamWriter writer = new StreamWriter(path)){await writer.WriteAsync(content);}
}
7. 文件操作的最佳實踐
-
使用?
using
?語句:確保文件流正確關閉,避免資源泄漏。 -
異常處理:捕獲?
IOException
、FileNotFoundException
?等異常。 -
大文件處理:使用流式讀取(
StreamReader
/FileStream
)而非一次性讀取全部內容。 -
路徑處理:使用?
Path.Combine
?拼接路徑,避免硬編碼:string fullPath = Path.Combine(@"C:\example", "subfolder", "file.txt");
-
文件權限檢查:在訪問文件前檢查權限(
File.GetAccessControl
)。
8. 總結
本文詳細介紹了 C# 中的文件 I/O 操作,包括:
-
基本文件操作(創建、刪除、移動、復制)
-
文本文件的讀寫(
File.ReadAllText
、StreamReader
) -
二進制文件的處理(
BinaryReader
/BinaryWriter
) -
文件流(
FileStream
)的使用 -
目錄管理(
Directory
?類) -
異步文件操作(
ReadAsync
/WriteAsync
) -
最佳實踐(異常處理、資源釋放、路徑管理)
掌握這些技術后,你可以高效地處理各種文件操作需求,無論是小型配置文件還是大型數據文件。希望本文對你有所幫助!
?