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

C# 檔案與目錄操作完整教學:建立、複製、移動、刪除實戰範例

     編輯:關於C語言

前言

System.IO 命名空間提供豐富的類別操作檔案系統。本文整理最常用的檔案與目錄操作,包含建立、複製、移動、刪除,並示範靜態方法(File、Directory)與實例方法(FileInfo、DirectoryInfo)兩種風格的用法差異。

一、建立檔案與目錄

建立目錄

Directory.CreateDirectory 會建立指定路徑的所有層級目錄,若目錄已存在則不執行任何動作、也不擲回異常:

string folderName = @"c:\Top-Level Folder";
string subFolder = Path.Combine(folderName, "SubFolder");
Directory.CreateDirectory(subFolder);  // 安全呼叫,無需先檢查 Exists

建立檔案並寫入資料

string fileName = Path.GetRandomFileName();  // 產生隨機檔名
string filePath = Path.Combine(subFolder, fileName);

if (!File.Exists(filePath))
{
    using (FileStream fs = File.Create(filePath))
    {
        for (byte i = 0; i < 100; i++)
        {
            fs.WriteByte(i);
        }
    }
}
else
{
    Console.WriteLine($"檔案 \"{fileName}\" 已存在。");
}

讀取檔案內容

try
{
    byte[] buffer = File.ReadAllBytes(filePath);
    foreach (byte b in buffer)
    {
        Console.Write(b + " ");
    }
    Console.WriteLine();
}
catch (IOException e)
{
    Console.WriteLine(e.Message);
}

補充:附加模式寫入

若希望檔案存在時附加資料而非覆寫,可使用 FileStream 建構函式指定 FileMode.Append:

using (FileStream fs = new FileStream(filePath, FileMode.Append))
{
    for (byte i = 0; i < 100; i++)
    {
        fs.WriteByte(i);
    }
}

二、複製檔案與目錄

複製單一檔案

string sourceFile = Path.Combine(sourcePath, "test.txt");
string destFile = Path.Combine(targetPath, "test.txt");

// 第三個參數 true 表示覆寫既有檔案
File.Copy(sourceFile, destFile, true);

複製整個目錄下的所有檔案(非遞迴)

if (Directory.Exists(sourcePath))
{
    string[] files = Directory.GetFiles(sourcePath);
    
    if (!Directory.Exists(targetPath))
    {
        Directory.CreateDirectory(targetPath);
    }

    foreach (string s in files)
    {
        string fileName = Path.GetFileName(s);
        string dest = Path.Combine(targetPath, fileName);
        File.Copy(s, dest, true);  // 覆寫模式
    }
}
else
{
    Console.WriteLine("來源路徑不存在!");
}

注意:Directory.GetFiles 預設不遞迴子目錄。若需遞迴,請使用 SearchOption.AllDirectories 或自行實作遞迴走訪。

三、移動檔案與目錄

// 移動檔案
File.Move(@"C:\Users\Public\public\test.txt", 
          @"C:\Users\Public\private\test.txt");

// 移動整個目錄(含內容)
Directory.Move(@"C:\Users\Public\public\test\", 
               @"C:\Users\Public\private");

Move 實際上是「重新命名」路徑,來源與目的必須在同一磁碟分割區;跨磁碟需先複製再刪除。

四、刪除檔案與目錄

刪除檔案

刪除目錄

五、靜態類別 vs 實例類別:如何選擇?

特性File / DirectoryFileInfo / DirectoryInfo
呼叫方式靜態方法實例方法
效能每次呼叫都做安全性檢查建立實例時檢查一次,後續操作較快
適用場景單次操作同一檔案/目錄多次操作
路徑處理每次傳入完整路徑實例封裝路徑

總結

掌握 System.IO 核心類別的操作模式,能讓您輕鬆處理各種檔案系統需求。記住關鍵原則:

  • 路徑組合請用 Path.Combine,避免手工串接錯誤。
  • 檔案操作前建議檢查 Exists,但需注意競態條件(TOCTOU)。
  • 使用 using 確保 FileStream 正確關閉。
  • 刪除非空目錄必須指定 recursive: true。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved