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

C# 檔案與目錄操作核心類別:File、FileInfo、Directory、DirectoryInfo 完整實戰指南

     編輯:關於C語言

一、檔案操作雙雄:File vs FileInfo

特性File(靜態類別)FileInfo(實例類別)
實例化不可實例化,全靜態方法需建立實例 new FileInfo(path)
效能單次操作效率較高(內部快取安全檢查)重複操作同一檔案效率較高(避免重複安全檢查)
適用場景一次性檔案處理同一檔案多次讀寫/屬性存取
路徑參數每次呼叫需傳路徑建構時綁定路徑

二、FileInfo 核心屬性完整展示


FileInfo fi = new FileInfo(@"C:\abc.txt");

Console.WriteLine($"存在: {fi.Exists}");
Console.WriteLine($"長度: {fi.Length} bytes");
Console.WriteLine($"建立時間: {fi.CreationTime}");
Console.WriteLine($"最後存取: {fi.LastAccessTime}");
Console.WriteLine($"最後寫入: {fi.LastWriteTime}");
Console.WriteLine($"完整路徑: {fi.FullName}");
Console.WriteLine($"目錄: {fi.DirectoryName}");
Console.WriteLine($"副檔名: {fi.Extension}");
Console.WriteLine($"唯讀: {fi.IsReadOnly}");
Console.WriteLine($"屬性: {fi.Attributes}");

FileInfo屬性輸出

三、檔案讀寫基礎串流範例

1. 讀取文字檔


FileInfo fi = new FileInfo(@"C:\abc.txt");
if (!fi.Exists) fi.Create().Close(); // 建立空檔

using (FileStream fs = new FileStream(fi.FullName, FileMode.Open))
using (StreamReader sr = new StreamReader(fs))
{
    string line;
    while ((line = sr.ReadLine()) != null)
        Console.WriteLine(line);
}

檔案讀取範例

2. 關鍵點

  • using 區塊確保串流正確釋放(即使發生例外)
  • FileMode.Open 要求檔案必須存在
  • StreamReader.ReadLine() 回傳 null 表示結尾

四、目錄操作雙雄:Directory vs DirectoryInfo

設計理念與 File/FileInfo 完全對應:

  • Directory:靜態方法,單次操作目錄
  • DirectoryInfo:實例方法,重複操作同一目錄

DirectoryInfo 常用方法


DirectoryInfo di = new DirectoryInfo(@"C:\MyDir");
if (!di.Exists) di.Create(); // 建立目錄
di.Delete(); // 刪除空目錄
di.Delete(true); // 遞刪非空目錄
di.MoveTo(@"C:\NewPath"); // 移動/重命名

// 列舉子目錄與檔案
foreach (var subDir in di.GetDirectories())
    Console.WriteLine(subDir.FullName);
foreach (var file in di.GetFiles())
    Console.WriteLine($"{file.Name} ({file.Length} bytes)");

目錄列舉結果 C磁碟子目錄

五、ASP.NET 檔案上傳核心邏輯實戰


// 取得上傳檔案資訊
string fileName = FileUpload.FileName;
string ext = Path.GetExtension(fileName).ToLower().TrimStart('.');
long size = FileUpload.FileBytes.Length;

// 驗證副檔名與大小
string[] allowed = { "rar", "doc", "txt", "pdf" };
if (allowed.Contains(ext) && size <= 50 * 1024 * 1024)
{
    // 目標儲存目錄
    DirectoryInfo saveDir = new DirectoryInfo(Server.MapPath("~/fileupload/"));
    if (!saveDir.Exists) saveDir.Create(); // Directory.CreateDirectory 同效

    // 儲存檔案
    string savePath = Path.Combine(saveDir.FullName, fileName);
    FileUpload.SaveAs(savePath); // 或使用 FileStream 手動寫入
}

六、FileMode 列舉完整對照

FileMode行為檔案不存在檔案存在
CreateNew建立新檔建立拋例外
Create建立或覆寫建立截斷為 0 位元組
Open開啟現有拋例外開啟
OpenOrCreate開啟或建立建立開啟
Truncate開啟並清空拋例外截斷為 0
Append開啟並定位到末尾建立定位到末尾

總結

掌握 File/FileInfo、Directory/DirectoryInfo 四大核心類別的定位差異,配合 FileStream、StreamReader/Writer 串流管道,即可處理 90% 以上的檔案系統操作需求。記住:單次用靜態,重複用實例;善用 using 區塊管理資源;FileMode 選擇決定資料安全。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved