C#刪除文件夾里的所有文件的實(shí)現(xiàn)方案
一、 基礎(chǔ)方案:刪除文件夾內(nèi)所有文件(保留子文件夾)
適用于僅刪除目標(biāo)文件夾下直接存放的文件,不刪除子文件夾及其內(nèi)部文件的場景,核心使用 System.IO 命名空間的 API。
核心 API 說明
Directory.GetFiles(string path):獲取指定文件夾下所有直接文件的完整路徑(返回string[]數(shù)組)。File.Delete(string filePath):刪除單個(gè)指定文件,需處理文件占用等異常。
實(shí)現(xiàn)代碼
using System;
using System.IO;
namespace DeleteFolderFiles
{
class BasicDelete
{
/// <summary>
/// 刪除指定文件夾內(nèi)所有直接文件(保留子文件夾)
/// </summary>
/// <param name="folderPath">目標(biāo)文件夾路徑</param>
public static void DeleteAllFilesInFolder(string folderPath)
{
// 1. 驗(yàn)證文件夾是否存在,避免路徑錯(cuò)誤
if (!Directory.Exists(folderPath))
{
Console.WriteLine($"錯(cuò)誤:文件夾 {folderPath} 不存在!");
return;
}
try
{
// 2. 獲取文件夾內(nèi)所有直接文件的路徑
string[] allFiles = Directory.GetFiles(folderPath);
// 3. 遍歷并刪除每個(gè)文件
foreach (string filePath in allFiles)
{
// 確保文件存在(避免并發(fā)場景下文件已被刪除)
if (File.Exists(filePath))
{
File.Delete(filePath);
Console.WriteLine($"成功刪除文件:{filePath}");
}
}
Console.WriteLine("所有文件刪除完成!");
}
catch (UnauthorizedAccessException ex)
{
Console.WriteLine($"錯(cuò)誤:沒有權(quán)限刪除文件 - {ex.Message}");
}
catch (IOException ex)
{
Console.WriteLine($"錯(cuò)誤:文件被占用或無法刪除 - {ex.Message}");
}
catch (Exception ex)
{
Console.WriteLine($"未知錯(cuò)誤:{ex.Message}");
}
}
// 調(diào)用示例
static void Main(string[] args)
{
// 目標(biāo)文件夾路徑(可改為絕對路徑,如 @"D:\TestFolder")
string targetFolder = @"TestFolder";
DeleteAllFilesInFolder(targetFolder);
}
}
}二、 進(jìn)階方案 1:刪除文件夾內(nèi)所有文件(包含子文件夾文件)
適用于需要遞歸刪除目標(biāo)文件夾下所有文件(含子文件夾內(nèi)文件),僅保留文件夾結(jié)構(gòu)(不刪除任何文件夾)的場景。
核心 API 說明
Directory.GetFiles(string path, string searchPattern, SearchOption searchOption):
searchPattern:文件篩選模式,"*.*"匹配所有文件。SearchOption.AllDirectories:遞歸搜索所有子目錄(TopDirectoryOnly僅搜索當(dāng)前目錄,對應(yīng)基礎(chǔ)方案)。
實(shí)現(xiàn)代碼
using System;
using System.IO;
namespace DeleteFolderFiles
{
class RecursiveDeleteFiles
{
/// <summary>
/// 遞歸刪除文件夾內(nèi)所有文件(包含子文件夾文件,保留文件夾結(jié)構(gòu))
/// </summary>
/// <param name="folderPath">目標(biāo)文件夾路徑</param>
public static void DeleteAllFilesRecursively(string folderPath)
{
if (!Directory.Exists(folderPath))
{
Console.WriteLine($"錯(cuò)誤:文件夾 {folderPath} 不存在!");
return;
}
try
{
// 遞歸獲取所有文件(當(dāng)前目錄+所有子目錄)
string[] allFiles = Directory.GetFiles(
folderPath,
"*.*",
SearchOption.AllDirectories
);
// 批量刪除
foreach (string filePath in allFiles)
{
if (File.Exists(filePath))
{
// 可選:設(shè)置文件為正常屬性(避免只讀文件無法刪除)
File.SetAttributes(filePath, FileAttributes.Normal);
File.Delete(filePath);
Console.WriteLine($"成功刪除文件:{filePath}");
}
}
Console.WriteLine("所有文件(含子文件夾文件)刪除完成!");
}
catch (UnauthorizedAccessException ex)
{
Console.WriteLine($"權(quán)限錯(cuò)誤:{ex.Message}");
}
catch (IOException ex)
{
Console.WriteLine($"文件占用錯(cuò)誤:{ex.Message}");
}
catch (Exception ex)
{
Console.WriteLine($"未知錯(cuò)誤:{ex.Message}");
}
}
// 調(diào)用示例
static void Main(string[] args)
{
string targetFolder = @"D:\TestFolder";
DeleteAllFilesRecursively(targetFolder);
}
}
}三、 進(jìn)階方案 2:刪除文件夾(含所有文件 + 子文件夾)+ 重建空文件夾
適用于需要徹底清空文件夾(刪除所有文件和子文件夾),最終保留一個(gè)空的目標(biāo)文件夾的場景,比遞歸刪除文件更高效。
核心 API 說明
Directory.Delete(string path, bool recursive):recursive: true:遞歸刪除目標(biāo)文件夾及其所有子文件夾、文件。recursive: false:僅刪除空的目標(biāo)文件夾。
Directory.CreateDirectory(string path):創(chuàng)建文件夾(若文件夾已存在,不會拋出異常,直接返回現(xiàn)有文件夾信息)。
實(shí)現(xiàn)代碼
using System;
using System.IO;
namespace DeleteFolderFiles
{
class DeleteAndRecreateFolder
{
/// <summary>
/// 徹底清空文件夾(刪除文件+子文件夾),重建空文件夾
/// </summary>
/// <param name="folderPath">目標(biāo)文件夾路徑</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($"權(quán)限錯(cuò)誤:無法刪除/創(chuàng)建文件夾 - {ex.Message}");
}
catch (IOException ex)
{
Console.WriteLine($"IO錯(cuò)誤:文件夾被占用 - {ex.Message}");
}
catch (Exception ex)
{
Console.WriteLine($"未知錯(cuò)誤:{ex.Message}");
}
}
// 調(diào)用示例
static void Main(string[] args)
{
string targetFolder = @"D:\TestFolder";
ClearFolderCompletely(targetFolder);
}
}
}四、 關(guān)鍵注意事項(xiàng)(避坑指南)
- 路徑格式:
- C# 中文件夾路徑推薦使用
@Verbatim 字符串(如@"D:\TestFolder"),避免轉(zhuǎn)義字符(\)沖突。 - 支持相對路徑(如
@"TestFolder")和絕對路徑(如@"D:\TestFolder"),相對路徑對應(yīng)程序運(yùn)行目錄。
- C# 中文件夾路徑推薦使用
- 異常處理:
- 必須捕獲
UnauthorizedAccessException(權(quán)限不足)和IOException(文件 / 文件夾被占用、只讀文件等)。 - 避免因單個(gè)文件刪除失敗導(dǎo)致整個(gè)批量操作中斷(可在循環(huán)內(nèi)添加
try-catch單獨(dú)處理單個(gè)文件)。
- 必須捕獲
- 只讀文件處理:
- 若文件為「只讀屬性」,直接調(diào)用
File.Delete會拋出異常,需先通過File.SetAttributes(filePath, FileAttributes.Normal)重置文件屬性。
- 若文件為「只讀屬性」,直接調(diào)用
- 并發(fā)安全:
- 若存在多線程 / 多進(jìn)程操作同一文件夾,需先通過
File.Exists(filePath)驗(yàn)證文件是否存在,避免刪除已被其他進(jìn)程刪除的文件。
- 若存在多線程 / 多進(jìn)程操作同一文件夾,需先通過
- 謹(jǐn)慎操作:
- 刪除操作不可逆,建議在正式刪除前添加日志輸出或備份邏輯,避免誤刪重要文件。
- 切勿操作系統(tǒng)關(guān)鍵文件夾(如
C:\Windows),可能導(dǎo)致系統(tǒng)異常。
總結(jié)
- 僅刪當(dāng)前文件夾文件(保留子文件夾):使用
Directory.GetFiles(folderPath)+ 遍歷File.Delete。 - 刪所有文件(含子文件夾文件,保留文件夾結(jié)構(gòu)):使用
Directory.GetFiles(..., SearchOption.AllDirectories)+ 遞歸刪除。 - 徹底清空文件夾(重建空文件夾):使用
Directory.Delete(folderPath, true)+Directory.CreateDirectory(folderPath),效率最高。 - 安全要點(diǎn):添加異常處理、驗(yàn)證路徑存在、處理只讀文件、避免誤刪系統(tǒng)文件。
到此這篇關(guān)于C#刪除文件夾里的所有文件的實(shí)現(xiàn)方案的文章就介紹到這了,更多相關(guān)C#刪除文件夾所有文件內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
C#?wpf利用附加屬性實(shí)現(xiàn)界面上定義裝飾器
裝飾器是wpf中可以浮在控件上面的一種組件,我們通??梢杂脕韺?shí)現(xiàn)一些諸如控件拖動點(diǎn)、提示框、自定義鼠標(biāo)等界面功能。本文主要是利用附加屬性實(shí)現(xiàn)界面上定義裝飾器,需要的可以參考下2022-12-12
C# 創(chuàng)建Excel氣泡圖的實(shí)例代碼
這篇文章主要介紹了C# 創(chuàng)建Excel氣泡圖的實(shí)例代碼,本文通過實(shí)例代碼給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2021-01-01
C#自定義序列化ISerializable的實(shí)現(xiàn)方法
這篇文章主要介紹了C#自定義序列化ISerializable的實(shí)現(xiàn)方法,涉及C#序列化的操作技巧,非常具有實(shí)用價(jià)值,需要的朋友可以參考下2015-04-04
C#設(shè)置自定義文件圖標(biāo)實(shí)現(xiàn)雙擊啟動(修改注冊表)
這篇文章介紹的是利用C#設(shè)置自定義文件圖標(biāo),然后實(shí)現(xiàn)雙擊啟動的功能,文章給出了示例代碼,介紹的很詳細(xì),有需要的可以參考借鑒。2016-08-08
.NET使用C#導(dǎo)入Excel文件數(shù)據(jù)到數(shù)據(jù)庫
將Excel文件中的數(shù)據(jù)導(dǎo)入到數(shù)據(jù)庫中不僅能夠提升數(shù)據(jù)處理的效率和準(zhǔn)確性,還能極大地促進(jìn)數(shù)據(jù)分析和決策制定的過程,本文將介紹如何在.NET平臺使用C#導(dǎo)入Excel文件數(shù)據(jù)到數(shù)據(jù)庫中,需要的可以參考下2024-12-12

