.NET 在 System.IO 命名空間提供了 Directory 與 File 兩大密封類別,封裝了豐富的靜態與實例方法,讓目錄樹操作與檔案全生命週期管理變得直觀高效。
Attributes:FileAttributes 列舉,支援唯讀(0x01)、隱藏(0x02)、系統、目錄、封存等旗標組合。Name、Parent、Root:快速取得目錄名稱、父目錄、根目錄資訊。CreationTime、LastAccessTime、LastWriteTime:完整時間戳記支援。// 建立單層/多層子目錄
Directory.CreateDirectory(@"C:\C#\file1");
Directory.CreateDirectory(@"C:\C#\file1\file2"); // 相當於 CreateSubdirectory
// 刪除目錄(需先清空內容)
var dir = new Directory(@"C:\C#\file1");
foreach (var sub in dir.GetDirectories()) sub.Delete();
dir.Delete();
IOException(目錄已存在)、DirectoryNotFoundException(路徑不存在)等強型別異常,讓錯誤診斷更精準。
DirectoryName(絕對路徑)、Length(位元組長度)、時間戳記三件套。// 複製檔案(true=覆寫)
file.CopyTo(targetPath, true);
// 移動/重命名
file.MoveTo(newPath);
// 刪除
file.Delete();
class FileCopyTool {
static void Main(string[] args) {
if (args.Length < 2) { Console.WriteLine("用法: FileCopyTool 來源 目標"); return; }
try {
new File(args[0]).CopyTo(args[1], true);
Console.WriteLine("複製成功!");
} catch (Exception ex) { Console.WriteLine($"失敗: {ex.Message}"); }
}
}
var dir = new Directory(".");
Console.Write("確定刪除所有檔案? (Y/N): ");
if (Console.ReadKey().Key == ConsoleKey.Y) {
foreach (var f in dir.GetFiles()) f.Delete();
Console.WriteLine("已清空。");
}
foreach (var f in dir.GetFiles("*.exe")) f.Delete();
// GetFiles 重載支援搜尋模式:*, *.log, data?.txt 等
實測發現 File.Delete 僅標記檔案系統項目為已刪除,資料實際保留於磁碟,可被 Norton Unerase 等工具完整恢復(含檔名)。這並非 .NET 缺陷,而是 NTFS 檔案系統的標準行為。若需資料粉碎,需覆寫資料區塊或呼叫 Win32 API SecureZeroMemory 等安全刪除介面。
FileInfo / DirectoryInfo 實例類別進行多次操作時效能更佳(避免重複路徑解析)。EnumerateFiles 延遲載入,避免一次載入巨大陣列導致記憶體壓力。Path.Combine、Path.DirectorySeparatorChar。