.NET 提供成對的靜態與實例類別處理檔案與目錄:File/FileInfo、Directory/DirectoryInfo。本文系統對比兩者差異,並演示屬性查詢、存在性檢查、讀寫、列舉等核心操作。
| 特性 | File (靜態) | FileInfo (實例) |
|---|---|---|
| 實例化 | 不需 | 需 new FileInfo(path) |
| 安全檢查 | 每次呼叫皆執行 | 建構時一次,後續無 |
| 效能 | 單次操作較優 | 多次操作同一檔案較優 |
| 路徑參數 | 每方法必傳 | 建構時綁定 |
| 適用場景 | 單次、臨時操作 | 同一檔案多次操作 |
FileInfo fi = new FileInfo(@"c:\abc.txt");
Console.WriteLine("Attributes: " + fi.Attributes);
Console.WriteLine("CreationTime: " + fi.CreationTime);
Console.WriteLine("CreationTimeUtc: " + fi.CreationTimeUtc);
Console.WriteLine("Directory: " + fi.Directory);
Console.WriteLine("DirectoryName: " + fi.DirectoryName);
Console.WriteLine("Exists: " + fi.Exists);
Console.WriteLine("Extension: " + fi.Extension);
Console.WriteLine("FullName: " + fi.FullName);
Console.WriteLine("IsReadOnly: " + fi.IsReadOnly);
Console.WriteLine("LastAccessTime: " + fi.LastAccessTime);
Console.WriteLine("LastWriteTime: " + fi.LastWriteTime);
Console.WriteLine("Length: " + fi.Length); // 位元組
Console.WriteLine("Name: " + fi.Name);
屬性涵蓋時間戳(本地/UTC)、路徑資訊、大小、屬性旗標,滿足檔案中繼資料查詢所有需求。
FileInfo fi = new FileInfo(@"c:\abc.txt");
if (!fi.Exists) fi.Create(); // 建立空檔
FileStream fs = new FileStream(fi.FullName, FileMode.Open);
StreamReader sr = new StreamReader(fs);
try
{
string line;
while ((line = sr.ReadLine()) != null)
{
Console.WriteLine(line); // 處理每一行
}
}
catch (IOException ex) { throw; }
finally
{
sr.Close(); fs.Close();
}
| 操作 | Directory (靜態) | DirectoryInfo (實例) |
|---|---|---|
| 建立 | CreateDirectory(path) | Create() |
| 刪除 | Delete(path, recursive) | Delete(recursive) |
| 移動 | Move(src, dest) | MoveTo(dest) |
| 存在檢查 | Exists(path) | Exists |
| 列舉子目錄 | GetDirectories(path) | GetDirectories() |
| 列舉檔案 | GetFiles(path) | GetFiles() |
| 父目錄 | GetParent(path) | Parent |
| 根目錄 | GetDirectoryRoot(path) | Root |
DirectoryInfo di = new DirectoryInfo(@"c:\");
FileInfo[] files = di.GetFiles(); // 僅當前目錄檔案,不含子目錄
foreach (FileInfo f in files)
{
Console.WriteLine($"Name: {f.Name}, Length: {f.Length} bytes");
// 輸出至 TextBox 或其他 UI
}
輸出 C 磁碟根目錄檔案名稱與大小。GetFiles() 可傳入搜尋模式(如 "*.log")與 SearchOption.AllDirectories 遞迴搜尋。
File.Copy(src, dest, overwrite) / fi.CopyTo(dest, overwrite)File.Move / fi.MoveToFile.Replace(src, dest, backup) 原子性替換fi.Encrypt() / fi.Decrypt() (EFS,僅 NTFS)FileSystemWatcher 事件驅動監控Path.Combine、Path.GetFullPath、Path.GetFileName 等 Path 方法AppDomain.CurrentDomain.BaseDirectory 或 IWebHostEnvironment.ContentRootPath 解析熟練掌握檔案/目錄雙重 API 的選擇時機與核心操作,是 .NET 開發者處理持久化存儲、配置管理、日誌系統的基本功。