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

C# File/FileInfo 與 Directory/DirectoryInfo 檔案目錄操作全解析

     編輯:關於C#

.NET 提供成對的靜態與實例類別處理檔案與目錄:File/FileInfo、Directory/DirectoryInfo。本文系統對比兩者差異,並演示屬性查詢、存在性檢查、讀寫、列舉等核心操作。

一、File vs FileInfo 選擇指南

特性File (靜態)FileInfo (實例)
實例化不需需 new FileInfo(path)
安全檢查每次呼叫皆執行建構時一次,後續無
效能單次操作較優多次操作同一檔案較優
路徑參數每方法必傳建構時綁定
適用場景單次、臨時操作同一檔案多次操作

二、FileInfo 屬性查詢實戰

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 讀取文字檔範例

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 vs DirectoryInfo 對應

操作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 列舉檔案實戰

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.MoveTo
  • 替換:File.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 開發者處理持久化存儲、配置管理、日誌系統的基本功。

FileInfo 屬性輸出 FileInfo 讀取輸出 DirectoryInfo 列舉檔案 目錄操作截圖
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved