首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> .NET 網頁程式設計 >> C# >> 關於C#

C# Directory/DirectoryInfo 目錄操作與檔案上傳實戰

     編輯:關於C#

目錄操作是檔案管理、上傳下載、備份同步等功能的基礎。Directory(靜態類別)與 DirectoryInfo(實例類別)提供互補的 API。本文結合 ASP.NET 檔案上傳場景,實戰演示目錄檢查建立、遍歷列舉、移動刪除等核心操作。

一、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 實例方法實戰

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 靜態方法對應

操作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 屬性

四、FileStream 基礎補充

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。

五、FileStream vs StreamReader/Writer 選擇指南

  • FileStream:隨機存取、二進位檔、大檔分塊、需精確控制位置
  • StreamReader/Writer:文字檔、逐行處理、編碼轉換
  • File 靜態方法:一次性讀寫小檔(ReadAllText/WriteAllBytes)

六、目錄操作最佳實踐

  1. 路徑操作使用 Path.Combine、Path.GetDirectoryName 等 Path 類別方法,避免字串拼接錯誤
  2. 建立目錄用 Directory.CreateDirectory,自動處理多層不存在、已存在不報錯
  3. 刪除非空目錄必須 recursive=true,謹慎使用
  4. 列舉大量檔案使用 EnumerateFiles/EnumerateDirectories 延遲執行,減少記憶體
  5. 檔案上傳必須驗證:副檔名、MIME 類型、大小、惡意內容掃描

掌握目錄與檔案資訊類別的互補用法,能輕鬆構建檔案管理、同步備份、上傳下載等核心功能。

C 磁碟目錄列舉 建立前目錄 建立後目錄 FileStream 建構子
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved