C#刪除文件夾里的所有文件的實現方案
更新時間:2025年12月29日 08:48:24 作者:StevenChen85
你需要在 C# 中實現刪除指定文件夾內所有文件的功能,下面會提供多種適配不同場景的實現方案,包含基礎用法、安全用法及進階需求,同時規(guī)避常見坑點,需要的朋友可以參考下
一、 基礎方案:刪除文件夾內所有文件(保留子文件夾)
適用于僅刪除目標文件夾下直接存放的文件,不刪除子文件夾及其內部文件的場景,核心使用 System.IO 命名空間的 API。
核心 API 說明
Directory.GetFiles(string path):獲取指定文件夾下所有直接文件的完整路徑(返回string[]數組)。File.Delete(string filePath):刪除單個指定文件,需處理文件占用等異常。
實現代碼
using System;
using System.IO;
namespace DeleteFolderFiles
{
class BasicDelete
{
/// <summary>
/// 刪除指定文件夾內所有直接文件(保留子文件夾)
/// </summary>
/// <param name="folderPath">目標文件夾路徑</param>
public static void DeleteAllFilesInFolder(string folderPath)
{
// 1. 驗證文件夾是否存在,避免路徑錯誤
if (!Directory.Exists(folderPath))
{
Console.WriteLine($"錯誤:文件夾 {folderPath} 不存在!");
return;
}
try
{
// 2. 獲取文件夾內所有直接文件的路徑
string[] allFiles = Directory.GetFiles(folderPath);
// 3. 遍歷并刪除每個文件
foreach (string filePath in allFiles)
{
// 確保文件存在(避免并發(fā)場景下文件已被刪除)
if (File.Exists(filePath))
{
File.Delete(filePath);
Console.WriteLine($"成功刪除文件:{filePath}");
}
}
Console.WriteLine("所有文件刪除完成!");
}
catch (UnauthorizedAccessException ex)
{
Console.WriteLine($"錯誤:沒有權限刪除文件 - {ex.Message}");
}
catch (IOException ex)
{
Console.WriteLine($"錯誤:文件被占用或無法刪除 - {ex.Message}");
}
catch (Exception ex)
{
Console.WriteLine($"未知錯誤:{ex.Message}");
}
}
// 調用示例
static void Main(string[] args)
{
// 目標文件夾路徑(可改為絕對路徑,如 @"D:\TestFolder")
string targetFolder = @"TestFolder";
DeleteAllFilesInFolder(targetFolder);
}
}
}二、 進階方案 1:刪除文件夾內所有文件(包含子文件夾文件)
適用于需要遞歸刪除目標文件夾下所有文件(含子文件夾內文件),僅保留文件夾結構(不刪除任何文件夾)的場景。
核心 API 說明
Directory.GetFiles(string path, string searchPattern, SearchOption searchOption):
searchPattern:文件篩選模式,"*.*"匹配所有文件。SearchOption.AllDirectories:遞歸搜索所有子目錄(TopDirectoryOnly僅搜索當前目錄,對應基礎方案)。
實現代碼
using System;
using System.IO;
namespace DeleteFolderFiles
{
class RecursiveDeleteFiles
{
/// <summary>
/// 遞歸刪除文件夾內所有文件(包含子文件夾文件,保留文件夾結構)
/// </summary>
/// <param name="folderPath">目標文件夾路徑</param>
public static void DeleteAllFilesRecursively(string folderPath)
{
if (!Directory.Exists(folderPath))
{
Console.WriteLine($"錯誤:文件夾 {folderPath} 不存在!");
return;
}
try
{
// 遞歸獲取所有文件(當前目錄+所有子目錄)
string[] allFiles = Directory.GetFiles(
folderPath,
"*.*",
SearchOption.AllDirectories
);
// 批量刪除
foreach (string filePath in allFiles)
{
if (File.Exists(filePath))
{
// 可選:設置文件為正常屬性(避免只讀文件無法刪除)
File.SetAttributes(filePath, FileAttributes.Normal);
File.Delete(filePath);
Console.WriteLine($"成功刪除文件:{filePath}");
}
}
Console.WriteLine("所有文件(含子文件夾文件)刪除完成!");
}
catch (UnauthorizedAccessException ex)
{
Console.WriteLine($"權限錯誤:{ex.Message}");
}
catch (IOException ex)
{
Console.WriteLine($"文件占用錯誤:{ex.Message}");
}
catch (Exception ex)
{
Console.WriteLine($"未知錯誤:{ex.Message}");
}
}
// 調用示例
static void Main(string[] args)
{
string targetFolder = @"D:\TestFolder";
DeleteAllFilesRecursively(targetFolder);
}
}
}三、 進階方案 2:刪除文件夾(含所有文件 + 子文件夾)+ 重建空文件夾
適用于需要徹底清空文件夾(刪除所有文件和子文件夾),最終保留一個空的目標文件夾的場景,比遞歸刪除文件更高效。
核心 API 說明
Directory.Delete(string path, bool recursive):recursive: true:遞歸刪除目標文件夾及其所有子文件夾、文件。recursive: false:僅刪除空的目標文件夾。
Directory.CreateDirectory(string path):創(chuàng)建文件夾(若文件夾已存在,不會拋出異常,直接返回現有文件夾信息)。
實現代碼
using System;
using System.IO;
namespace DeleteFolderFiles
{
class DeleteAndRecreateFolder
{
/// <summary>
/// 徹底清空文件夾(刪除文件+子文件夾),重建空文件夾
/// </summary>
/// <param name="folderPath">目標文件夾路徑</param>
public static void ClearFolderCompletely(string folderPath)
{
try
{
// 1. 若文件夾存在,遞歸刪除(含所有文件和子文件夾)
if (Directory.Exists(folderPath))
{
Directory.Delete(folderPath, true);
Console.WriteLine($"已刪除文件夾:{folderPath}");
}
// 2. 重建空文件夾
Directory.CreateDirectory(folderPath);
Console.WriteLine($"已重建空文件夾:{folderPath}");
}
catch (UnauthorizedAccessException ex)
{
Console.WriteLine($"權限錯誤:無法刪除/創(chuàng)建文件夾 - {ex.Message}");
}
catch (IOException ex)
{
Console.WriteLine($"IO錯誤:文件夾被占用 - {ex.Message}");
}
catch (Exception ex)
{
Console.WriteLine($"未知錯誤:{ex.Message}");
}
}
// 調用示例
static void Main(string[] args)
{
string targetFolder = @"D:\TestFolder";
ClearFolderCompletely(targetFolder);
}
}
}四、 關鍵注意事項(避坑指南)
- 路徑格式:
- C# 中文件夾路徑推薦使用
@Verbatim 字符串(如@"D:\TestFolder"),避免轉義字符(\)沖突。 - 支持相對路徑(如
@"TestFolder")和絕對路徑(如@"D:\TestFolder"),相對路徑對應程序運行目錄。
- C# 中文件夾路徑推薦使用
- 異常處理:
- 必須捕獲
UnauthorizedAccessException(權限不足)和IOException(文件 / 文件夾被占用、只讀文件等)。 - 避免因單個文件刪除失敗導致整個批量操作中斷(可在循環(huán)內添加
try-catch單獨處理單個文件)。
- 必須捕獲
- 只讀文件處理:
- 若文件為「只讀屬性」,直接調用
File.Delete會拋出異常,需先通過File.SetAttributes(filePath, FileAttributes.Normal)重置文件屬性。
- 若文件為「只讀屬性」,直接調用
- 并發(fā)安全:
- 若存在多線程 / 多進程操作同一文件夾,需先通過
File.Exists(filePath)驗證文件是否存在,避免刪除已被其他進程刪除的文件。
- 若存在多線程 / 多進程操作同一文件夾,需先通過
- 謹慎操作:
- 刪除操作不可逆,建議在正式刪除前添加日志輸出或備份邏輯,避免誤刪重要文件。
- 切勿操作系統(tǒng)關鍵文件夾(如
C:\Windows),可能導致系統(tǒng)異常。
總結
- 僅刪當前文件夾文件(保留子文件夾):使用
Directory.GetFiles(folderPath)+ 遍歷File.Delete。 - 刪所有文件(含子文件夾文件,保留文件夾結構):使用
Directory.GetFiles(..., SearchOption.AllDirectories)+ 遞歸刪除。 - 徹底清空文件夾(重建空文件夾):使用
Directory.Delete(folderPath, true)+Directory.CreateDirectory(folderPath),效率最高。 - 安全要點:添加異常處理、驗證路徑存在、處理只讀文件、避免誤刪系統(tǒng)文件。
到此這篇關于C#刪除文件夾里的所有文件的實現方案的文章就介紹到這了,更多相關C#刪除文件夾所有文件內容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!

