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

ASP.NET 核心檔案系統操作:File、FileInfo、Directory、DirectoryInfo 完整 API 參考

     編輯:ASP.NET 基礎

前言

System.IO 命名空間提供檔案系統操作的核心類別。本文系統整理 File、FileInfo、Directory、DirectoryInfo 四大類別的關鍵方法與屬性,並附上實戰程式碼範例,作為開發檔案管理功能的快速參考手冊。

File 類別(靜態方法)vs FileInfo 類別(實例方法)

File 提供靜態方法,適合單次操作;FileInfo 提供實例屬性/方法,適合對同一檔案重複操作(效能較佳,避免重複安全性檢查)。

1. 檔案開啟:File.Open

public static FileStream Open(string path, FileMode mode)
// 範例:附加模式開啟並寫入
FileStream fs = File.Open(@"c:\tempuploads\newFile.txt", FileMode.Append);
byte[] info = { (byte)'h', (byte)'e', (byte)'l', (byte)'l', (byte)'o' };
fs.Write(info, 0, info.Length);
fs.Close();

2. 檔案建立:File.Create

public static FileStream Create(string path)
// 範例:建立檔案並立即關閉
FileStream fs = File.Create(@"c:\tempuploads\newFile.txt");
fs.Close(); // 必須關閉才能被其他程式存取

3. 檔案刪除:File.Delete

public static void Delete(string path)
File.Delete(@"c:\tempuploads\newFile.txt");

4. 檔案複製:File.Copy

public static void Copy(string source, string dest, bool overwrite)
// overwrite=true 允許覆蓋既有檔案
File.Copy(@"c:\tempuploads\newFile.txt", @"c:\tempuploads\BackUp.txt", true);

5. 檔案移動:File.Move

public static void Move(string source, string dest)
// 僅限同一邏輯磁碟機,跨磁碟需 Copy+Delete
File.Move(@"c:\tempuploads\BackUp.txt", @"c:\BackUp.txt");

6. 設定檔案屬性:File.SetAttributes

public static void SetAttributes(string path, FileAttributes attr)
// 設為唯讀+隱藏
File.SetAttributes(@"c:\tempuploads\newFile.txt", 
    FileAttributes.ReadOnly | FileAttributes.Hidden);

其他屬性:Archive(存檔)、System(系統)、Temporary(暫存)。

7. 判斷檔案是否存在:File.Exists

public static bool Exists(string path)
if (File.Exists(@"c:\tempuploads\newFile.txt"))
{
    // 存在則複製→刪除→移動
}
else
{
    // 不存在則建立→開啟→設定屬性
}

8. 文字檔專用方法

  • AppendText:附加文字(UTF-8)
  • CreateText:建立/開啟文字檔寫入
  • OpenText:開啟文字檔讀取

建議:需支援 Big5/GB2312 等編碼時,改用 StreamReader/StreamWriter 指定 Encoding.Default:

// 讀取
StreamReader sr = new StreamReader(@"c:\test.txt", Encoding.Default);
string content = sr.ReadToEnd();
sr.Close();

// 寫入
StreamWriter sw = new StreamWriter(@"c:\test.txt", false, Encoding.Default);
sw.Write(content);
sw.Close();

Directory 類別(靜態)vs DirectoryInfo 類別(實例)

1. 建立目錄:Directory.CreateDirectory

public static DirectoryInfo CreateDirectory(string path)
Directory.CreateDirectory(@"c:\tempuploads\NewDirectory");

2. 設定目錄屬性:DirectoryInfo.Attributes

DirectoryInfo di = new DirectoryInfo(@"c:\tempuploads\NewDirectory");
di.Attributes = FileAttributes.ReadOnly | FileAttributes.Hidden;

3. 刪除目錄:Directory.Delete

public static void Delete(string path, bool recursive)
// recursive=true 刪除非空目錄(含子目錄/檔案)
Directory.Delete(@"c:\tempuploads\BackUp", true);

4. 移動目錄:Directory.Move

public static void Move(string source, string dest)
// 原文範例有誤:應用 Directory.Move 而非 File.Move
Directory.Move(@"c:\tempuploads\NewDirectory", @"c:\tempuploads\BackUp");

5. 取得子目錄:Directory.GetDirectories

public static string[] GetDirectories(string path)
string[] dirs = Directory.GetDirectories(@"c:\tempuploads");

6. 取得檔案清單:Directory.GetFiles

public static string[] GetFiles(string path)
string[] files = Directory.GetFiles(@"c:\tempuploads");

7. 判斷目錄是否存在:Directory.Exists

public static bool Exists(string path)
if (Directory.Exists(@"c:\tempuploads\NewDirectory"))
{
    // 存在:取得子目錄/檔案 → 移動 → 刪除
}
else
{
    // 不存在:建立 → 設定屬性
}

路徑表示法與 C# 字串處理

路徑類型範例說明
相對路徑Book目前目錄下的 Book
工作目錄相對\Tmp\Book目前磁碟根目錄下的 Tmp\Book
絕對路徑C:\Tmp\Book完整路徑

C# 中反斜線 \ 為跳脫字元,需寫成 \\ 或使用 @ 逐字字串:@"C:\Tmp\Book"。

最佳實務總結

  1. 大量操作同一檔案/目錄時優先用 FileInfo/DirectoryInfo
  2. 所有檔案操作務必包裹在 try-catch 處理 IOException、UnauthorizedAccessException
  3. 路徑拼接使用 Path.Combine 避免分隔符號問題
  4. 非同步作業改用 FileStream 搭配 async/await(.NET Core 以降)
  5. 大型目錄遍歷考慮 EnumerateFiles/EnumerateDirectories 避免記憶體壓力
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved