目錄操作是檔案管理、上傳下載、備份同步等功能的基礎。Directory(靜態類別)與 DirectoryInfo(實例類別)提供互補的 API。本文結合 ASP.NET 檔案上傳場景,實戰演示目錄檢查建立、遍歷列舉、移動刪除等核心操作。
string fileName = FileUpload.FileName;
string ext = fileName.Substring(fileName.LastIndexOf('.') + 1).ToLower();
// 1. 格式驗證
string[] allowed = { "rar", "doc", "txt", "pdf" };
if (!allowed.Contains(ext)) return; // 拒絕
// 2. 大小限制(50MB)
if (FileUpload.FileBytes.Length > 50 * 1024 * 1024) return;
// 3. 目標目錄處理
string savePath = Server.MapPath("fileupload/");
DirectoryInfo dir = new DirectoryInfo(savePath);
if (!Directory.Exists(dir.FullName)) // 靜態方法檢查
Directory.CreateDirectory(dir.FullName); // 遞迴建立
// 4. 儲存檔案
FileUpload.SaveAs(Path.Combine(dir.FullName, fileName));
DirectoryInfo d1 = new DirectoryInfo(@"c:\abcd");
DirectoryInfo d2 = new DirectoryInfo(@"c:\atest");
DirectoryInfo root = new DirectoryInfo(@"C:\");
// 建立
if (!d1.Exists) d1.Create();
if (!d2.Exists) Directory.CreateDirectory(d2.FullName);
// 刪除
if (d2.Exists) d2.Delete(); // 僅限空目錄,非空需 d2.Delete(true)
// 移動/重命名
d1.MoveTo(d2.FullName); // d1 移動為 d2,原 d1 不存在
// 列舉子目錄
DirectoryInfo[] subDirs = root.GetDirectories();
foreach (var d in subDirs) Console.WriteLine(d.FullName);
// 列舉檔案
FileInfo[] files = root.GetFiles();
foreach (var f in files) Console.WriteLine(f.FullName);
輸出:列印 C 磁碟根目錄下所有子目錄與檔案完整路徑。
| 操作 | 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 屬性 |
FileInfo fi = new FileInfo(@"C:\myfile.txt");
FileStream fs = new FileStream(fi.FullName, FileMode.Create);
byte[] data = new byte[100000];
new Random().NextBytes(data);
for (int i = 0; i < data.Length; i++)
fs.WriteByte(data[i]); // 逐位元組寫入(教學用,效能極差)
fs.Close();
實務建議:使用 fs.Write(data, 0, data.Length) 批次寫入,或直接 File.WriteAllBytes。
ReadAllText/WriteAllBytes)Path.Combine、Path.GetDirectoryName 等 Path 類別方法,避免字串拼接錯誤Directory.CreateDirectory,自動處理多層不存在、已存在不報錯recursive=true,謹慎使用EnumerateFiles/EnumerateDirectories 延遲執行,減少記憶體掌握目錄與檔案資訊類別的互補用法,能輕鬆構建檔案管理、同步備份、上傳下載等核心功能。