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

.NET 路徑/目錄/檔案操作全攻略:Path、Directory、File 類別詳解

     編輯:ASP.NET 基礎

一、Path 類別:純字串路徑運算,不存取實體磁碟

命名空間:System.IO。所有方法皆為 static,適合跨平台路徑組合與解析。

常用方法速查表

方法用途範例輸入範例輸出
ChangeExtension(path, ext)變更副檔名c:\a.txt, ".log"c:\a.log
Combine(path1, path2)智慧合併路徑 (自動處理分隔符)c:\dir, "file.txt"c:\dir\file.txt
GetDirectoryName(path)取得目錄路徑c:\dir\file.txtc:\dir
GetExtension(path)取得副檔名含點號c:\a.txt.txt
GetFileName(path)取得檔名含副檔名c:\dir\a.txta.txt
GetFileNameWithoutExtension(path)取得純檔名c:\dir\a.txta
GetFullPath(relativePath)轉換為絕對路徑test.exeC:\Project\bin\Debug\test.exe
GetTempFileName()建立暫存檔並回傳完整路徑—C:\Temp\tmp123.tmp
GetTempPath()取得系統暫存目錄—C:\Temp\
HasExtension(path)判斷是否有副檔名file.txttrue
IsPathRooted(path)判斷是否為絕對路徑\dir\filetrue

程式碼範例


string path = @"C:\Project\data\report.txt";
Console.WriteLine(Path.GetExtension(path));        // .txt
Console.WriteLine(Path.GetFileNameWithoutExtension(path)); // report
path = Path.ChangeExtension(path, ".pdf");         // C:\Project\data\report.pdf
path = Path.Combine(@"C:\Project\data\", "backup", "2024"); // C:\Project\data\backup\2024

二、Directory / DirectoryInfo:目錄管理

Directory:static 方法,單次操作方便。
DirectoryInfo:實例類別,適合對同一目錄執行多次操作,效能較佳。

核心操作對照


// 建立目錄 (含多層)
Directory.CreateDirectory(@"C:\Data\Year2024\Month01");

// 判斷存在
if (Directory.Exists(@"C:\Data")) { /* ... */ }

// 刪除目錄
Directory.Delete(@"C:\Data", true); // true = 遞迴刪除非空目錄

// 列舉子目錄
string[] dirs = Directory.GetDirectories(@"C:\Windows", "*", SearchOption.AllDirectories);

// 列舉檔案
string[] files = Directory.GetFiles(@"C:\Windows", "*.ini", SearchOption.TopDirectoryOnly);

// 取得父目錄
DirectoryInfo parent = Directory.GetParent(@"C:\Data\Year2024\Month01"); // C:\Data\Year2024

DirectoryInfo 實例用法


var di = new DirectoryInfo(@"C:\Data");
Console.WriteLine(di.Name);       // Data
Console.WriteLine(di.FullName);   // C:\Data
Console.WriteLine(di.Parent);     // C:\
Console.WriteLine(di.CreationTime);
Console.WriteLine(di.LastAccessTime);

di.Create();                      // 建立
di.Delete(true);                  // 刪除 (含子項目)
var subDirs = di.GetDirectories(); // DirectoryInfo[]
var subFiles = di.GetFiles("*.log"); // FileInfo[]

三、File / FileInfo:檔案內容操作

File:static 便利方法,預設編碼 UTF-8 (無 BOM)。
FileInfo:實例提供更精細控制 (Stream、權限、屬性)。

常用靜態方法


// 寫入/覆蓋 (指定編碼避免中文亂碼)
File.WriteAllText(@"C:\log.txt", "中文內容", Encoding.UTF8);
File.WriteAllLines(@"C:\log.txt", new[] { "Line1", "Line2" }, Encoding.UTF8);

// 追加
File.AppendAllText(@"C:\log.txt", "\n新增一行", Encoding.UTF8);

// 讀取
string allText = File.ReadAllText(@"C:\log.txt", Encoding.UTF8);
string[] lines = File.ReadAllLines(@"C:\log.txt", Encoding.UTF8);

// 存在/刪除/複製/移動
if (File.Exists(@"C:\log.txt")) File.Delete(@"C:\log.txt");
File.Copy(@"C:\source.txt", @"C:\dest.txt", true); // true=覆蓋
File.Move(@"C:\old.txt", @"C:\new.txt");

FileInfo 進階用法


var fi = new FileInfo(@"C:\large.log");
Console.WriteLine($"Size: {fi.Length} bytes");
Console.WriteLine($"Created: {fi.CreationTime}");

// 取得 Stream 手動控制讀寫 (大檔案建議)
using (var fs = fi.OpenRead())
using (var sr = new StreamReader(fs, Encoding.UTF8))
{
    string line;
    while ((line = sr.ReadLine()) != null) { /* 處理 */ }
}

// 開啟文字寫入器 (自動關閉)
using (var sw = fi.AppendText()) // StreamWriter
{
    sw.WriteLine("追加記錄");
}

四、最佳實務與效能提示

  • 大檔案處理:避免 ReadAllText/WriteAllText 一次載入記憶體,改用 StreamReader/StreamWriter 或 File.OpenRead/OpenWrite 串流處理。
  • 編碼一致性:明確指定 Encoding.UTF8 (或 new UTF8Encoding(false) 無 BOM),跨平台相容性最佳。
  • 路徑操作:優先使用 Path.Combine 而非字串連接,自動處理平台分隔符 (\ vs /)。
  • 非同步 I/O:.NET 4.5+ 使用 File.ReadAllTextAsync、StreamReader.ReadLineAsync 避免阻塞 UI 執行緒。
  • 例外處理:檔案操作務必包在 try-catch 捕捉 IOException、UnauthorizedAccessException、FileNotFoundException。

五、.NET Core / .NET 5+ 跨平台注意事項

  • Path.DirectorySeparatorChar 在 Windows 為 \\,Linux/macOS 為 /,Path.Combine 會自動適配。
  • 避免硬式編碼路徑分隔符,善用 Path.Join (Core 2.1+) 可接受多個片段參數。
  • 暫存目錄 Path.GetTempPath() 在容器環境可能指向 /tmp,權限需確認。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved