最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

C#刪除文件夾里的所有文件的實(shí)現(xiàn)方案

 更新時(shí)間:2025年12月29日 08:48:24   作者:StevenChen85  
你需要在 C# 中實(shí)現(xiàn)刪除指定文件夾內(nèi)所有文件的功能,下面會提供多種適配不同場景的實(shí)現(xiàn)方案,包含基礎(chǔ)用法、安全用法及進(jìn)階需求,同時(shí)規(guī)避常見坑點(diǎn),需要的朋友可以參考下

一、 基礎(chǔ)方案:刪除文件夾內(nèi)所有文件(保留子文件夾)

適用于僅刪除目標(biāo)文件夾下直接存放的文件,不刪除子文件夾及其內(nèi)部文件的場景,核心使用 System.IO 命名空間的 API。

核心 API 說明

  1. Directory.GetFiles(string path):獲取指定文件夾下所有直接文件的完整路徑(返回 string[] 數(shù)組)。
  2. 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 說明

  1. Directory.Delete(string path, bool recursive)
    • recursive: true:遞歸刪除目標(biāo)文件夾及其所有子文件夾、文件。
    • recursive: false:僅刪除空的目標(biāo)文件夾。
  2. 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)(避坑指南)

  1. 路徑格式
    • C# 中文件夾路徑推薦使用 @ Verbatim 字符串(如 @"D:\TestFolder"),避免轉(zhuǎn)義字符(\)沖突。
    • 支持相對路徑(如 @"TestFolder")和絕對路徑(如 @"D:\TestFolder"),相對路徑對應(yīng)程序運(yùn)行目錄。
  2. 異常處理
    • 必須捕獲 UnauthorizedAccessException(權(quán)限不足)和 IOException(文件 / 文件夾被占用、只讀文件等)。
    • 避免因單個(gè)文件刪除失敗導(dǎo)致整個(gè)批量操作中斷(可在循環(huán)內(nèi)添加 try-catch 單獨(dú)處理單個(gè)文件)。
  3. 只讀文件處理
    • 若文件為「只讀屬性」,直接調(diào)用 File.Delete 會拋出異常,需先通過 File.SetAttributes(filePath, FileAttributes.Normal) 重置文件屬性。
  4. 并發(fā)安全
    • 若存在多線程 / 多進(jìn)程操作同一文件夾,需先通過 File.Exists(filePath) 驗(yàn)證文件是否存在,避免刪除已被其他進(jìn)程刪除的文件。
  5. 謹(jǐn)慎操作
    • 刪除操作不可逆,建議在正式刪除前添加日志輸出或備份邏輯,避免誤刪重要文件。
    • 切勿操作系統(tǒng)關(guān)鍵文件夾(如 C:\Windows),可能導(dǎo)致系統(tǒng)異常。

總結(jié)

  1. 僅刪當(dāng)前文件夾文件(保留子文件夾):使用 Directory.GetFiles(folderPath) + 遍歷 File.Delete
  2. 刪所有文件(含子文件夾文件,保留文件夾結(jié)構(gòu)):使用 Directory.GetFiles(..., SearchOption.AllDirectories) + 遞歸刪除。
  3. 徹底清空文件夾(重建空文件夾):使用 Directory.Delete(folderPath, true) + Directory.CreateDirectory(folderPath),效率最高。
  4. 安全要點(diǎn):添加異常處理、驗(yàn)證路徑存在、處理只讀文件、避免誤刪系統(tǒng)文件。

到此這篇關(guān)于C#刪除文件夾里的所有文件的實(shí)現(xiàn)方案的文章就介紹到這了,更多相關(guān)C#刪除文件夾所有文件內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • 用C#將圖片保存至Oracle BLOB字段中的方法

    用C#將圖片保存至Oracle BLOB字段中的方法

    這篇文章主要介紹了用C#將圖片保存至Oracle BLOB字段中的方法, 依靠ImageViewer庫進(jìn)行操作,需要的朋友可以參考下
    2015-07-07
  • C#?wpf利用附加屬性實(shí)現(xià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í)例代碼

    這篇文章主要介紹了C# 創(chuàng)建Excel氣泡圖的實(shí)例代碼,本文通過實(shí)例代碼給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2021-01-01
  • C#自定義序列化ISerializable的實(shí)現(xiàn)方法

    C#自定義序列化ISerializable的實(shí)現(xiàn)方法

    這篇文章主要介紹了C#自定義序列化ISerializable的實(shí)現(xiàn)方法,涉及C#序列化的操作技巧,非常具有實(shí)用價(jià)值,需要的朋友可以參考下
    2015-04-04
  • c#與mysql的連接

    c#與mysql的連接

    c#與mysql的連接...
    2007-03-03
  • 使用C#實(shí)現(xiàn)AES加密與解密的示例

    使用C#實(shí)現(xiàn)AES加密與解密的示例

    在現(xiàn)代應(yīng)用程序中,數(shù)據(jù)加密是保護(hù)敏感信息安全的重要手段,AES(高級加密標(biāo)準(zhǔn))是一種廣泛使用的對稱加密算法,提供強(qiáng)大的數(shù)據(jù)保護(hù)功能,今天,我將為大家展示如何使用 C# 實(shí)現(xiàn) AES 加密和解密,需要的朋友可以參考下
    2024-12-12
  • 如何在C#中使用只讀的 Collections

    如何在C#中使用只讀的 Collections

    這篇文章主要介紹了如何在C#中使用只讀的 Collections,幫助大家更好的理解和學(xué)習(xí)使用c#,感興趣的朋友可以了解下
    2021-04-04
  • 淺析C#中不同格式請求的區(qū)別

    淺析C#中不同格式請求的區(qū)別

    form-data?請求和?x-www-form-urlencoded?請求是兩種常見的?HTTP?請求體格式,這篇文章主要為大家詳細(xì)介紹了二者的區(qū)別與應(yīng)用,希望對大家有所幫助
    2023-08-08
  • C#設(shè)置自定義文件圖標(biāo)實(shí)現(xiàn)雙擊啟動(修改注冊表)

    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ù)庫

    .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

最新評論

贺州市| 腾冲县| 庆城县| 武平县| 武穴市| 吉林市| 厦门市| 梅河口市| 赤峰市| 玛曲县| 吉隆县| 泸定县| 徐闻县| 定南县| 阿克苏市| 兴山县| 昔阳县| 筠连县| 诸暨市| 珠海市| 浦城县| 谢通门县| 朔州市| 通城县| 呈贡县| 乐亭县| 道孚县| 澄江县| 吉木乃县| 扎囊县| 三江| 邹城市| 西丰县| 桐乡市| 科尔| 汶川县| 安义县| 伊宁县| 怀宁县| 拉孜县| 古浪县|