【问题标题】:ignore or skip through folders that give “Unauthorized Access” “ with function Directory.GetDirectories()”忽略或跳过提供“未经授权访问”“具有功能 Directory.GetDirectories()”的文件夹
【发布时间】:2018-10-10 10:18:17
【问题描述】:

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

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

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];
}

}

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

【问题讨论】:

  • 在您提供的GetFilesSafe 方法实现中,您究竟不清楚什么?
  • 我不知道在哪里放什么。我在学习如何使用的视觉工作室中尝试不同的组合,我到处都看到错误。为不知道如何编码而道歉。
  • 如果您对第三方解决方案感兴趣,有一个名为 AlphaFS 的库(可通过 nuget 获得)让您指定选项以自动跳过无法访问的目录/文件。我不隶属,只是一个快乐的用户
  • 谢谢,我去看看。无论如何,我确定这一定是一个非常简单的问题,我可以使用 ruby​​ on rails,这是一个不平凡的问题。

标签: c#


【解决方案1】:

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

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

【讨论】:

  • 在远程计算机上运行,​​并且未经授权访问引发错误的“隐藏文件夹”。在某些时候,我设法通过了它,但它在第一个文件夹的第一个文件上停止了。然后我变了,不记得我做了什么。我会将我的代码放在您的示例中的什么位置?谢谢!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-03-13
  • 2015-03-05
  • 2013-02-07
  • 1970-01-01
  • 1970-01-01
  • 2014-11-27
相关资源
最近更新 更多