首页 > 解决方案 > 忽略或跳过提供“未经授权访问”“具有功能 Directory.GetDirectories()”的文件夹

问题描述

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

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

忽略“未经授权的访问”“函数 Directory.GetDirectories()”

使用 Directory.GetDirectories 时如何排除文件夹

当 Directory.GetFiles() 被拒绝访问时忽略文件夹/文件

隐藏文件夹 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);
        }


    }

我认为可能最接近的答案是: 忽略“未经授权的访问”“函数 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];
}

}

有人可以帮我理解我需要什么才能在我的代码中实施这种类型的解决方案或其他应用到文件夹的解决方案吗?我知道这不是最有效的学习方式,但对时间很敏感。感谢您/任何帮助。

标签: c#

解决方案


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

 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(如果文件位于同一机器上)


推荐阅读