忽略或跳过使用“ Directory.GetDirectories()”功能提供“未经授权的访问”的文件夹

时间:2018-10-10 10:18:17

标签: c#

我希望我的代码跳过或关闭由于任何原因导致错误的文件夹。当前,此代码可正确扫描文件夹,但如果任何文件夹出现错误,它将停止。主要是隐藏的文件夹。

我发现了这些几乎相同的问题,但是这些答案仅指向不同的方向,没有实现我需要的解决方案,而且我似乎无法在我的代码中实现任何解决方案。我已经摔了三天。

ignore "Unauthorized Access" " function Directory.GetDirectories()"

How to exclude folders when using Directory.GetDirectories

Ignore folders/files when Directory.GetFiles() is denied access

Hidden folders C#

我的代码是:

//encrypts target directory
    public void encryptDirectory(string location, string password)
    {

        //extensions to be encrypt
        var validExtensions = new[]
        {
            ".txt", ".doc"
        };

        string[] files = Directory.GetFiles(location);
        string[] childDirectories = Directory.GetDirectories(location);

        for (int i = 0; i < files.Length; i++){
            string extension = Path.GetExtension(files[i]);
            if (validExtensions.Contains(extension))
            {
                EncryptFile(files[i],password);
            }
        }
        for (int i = 0; i < childDirectories.Length; i++){
            encryptDirectory(childDirectories[i],password);
        }


    }

我认为可能最有效的答案是以下问题: ignore "Unauthorized Access" " function Directory.GetDirectories()"

将此代码应用于文件:

private static string[] GetFilesSafe(string location) {
try {
    return Directory.GetFiles(location);
} catch (UnauthorizedAccessException ex) {
    Console.Error.WriteLine(ex.Message);
    return new string[0];
}

}

有人可以帮助我了解我需要什么以实现这种类型的解决方案或我的代码中应用于文件夹的其他解决方案吗?我知道这不是最有效的学习方法,但是对时间敏感。感谢您的帮助。

1 个答案:

答案 0 :(得分:0)

由于您要忽略或跳过引发“未经授权的访问”的文件

 try {
    return Directory.GetFiles(location);
       //But you should alse check if the file is unavailable because it is:
        //being processed by another thread
        //or does not exist 
        // Not just for UnauthorizedAccessException !! 
} catch (UnauthorizedAccessException ex) {

        return true;
    }

您不想引发错误吗?您只想继续。 另外,您还尝试过以管理员身份运行应用程序,那样您就可以绕过UnauthorizedAccessException(如果文件位于同一目录中)