首页 > 解决方案 > 防止某些目录中的文件和文件夹被删除

问题描述

我有一个简单的功能,可以删除目标目录中的每个文件和文件夹。我想将某些目录列入黑名单,以便此删除功能不会对这些目录中的任何文件或文件夹执行删除。此外,它不应该删除该目录中的子目录。

我用一个列表来表示列入黑名单的目录:

private string[] blacklistedFolders =
 {
    "C:/Program Files",
    "C:/Program Files (x86)",
    "C:/ProgramData",
    "C:/Users",
    "C:/Windows"
};

删除目录中项目的代码:

bool IsBacklisted(string targetDir)
{
    for (int i = 0; i < blacklistedFolders.Length; i++)
    {
        string bList = blacklistedFolders[i];

        //Check if the targetDir contains the target directory
        if (bList.Contains(targetDir))
            return true;
    }
    return false;
}


public void EmptyDirectory(string targetDir)
{
    //Exit if path is blacklisted
    if (IsBacklisted(targetDir))
        return;

    DirectoryInfo dInfo = new DirectoryInfo(targetDir);

    foreach (FileInfo fileInfo in dInfo.GetFiles())
    {
        fileInfo.Delete();
    }

    foreach (DirectoryInfo dirInfo in dInfo.GetDirectories())
    {
        dirInfo.Delete(true);
    }
}

问题是我担心代码的这个黑名单部分可能会失败,导致黑名单目录中的文件和文件夹被删除。可能由于路径的末端或中间的存在或我可能错过的其他场景,黑名单检查在不同平台上可能不匹配。"/""\"

除了我目前用来检查列入黑名单的目录的功能之外,是否有内置System.IO功能或更好的方法来检查?String.Contains

标签: c#delete-file

解决方案


推荐阅读