如何在硬盘中查找所有exe文件?

时间:2016-11-15 09:13:47

标签: c#

如何在硬盘上找到满足以下条件的所有可执行文件 1.如果搜索时无法访问文件夹,请跳至下一个文件夹 2.如果搜索路径太长,请跳至下一个文件夹

这是我的代码:

public static string[] GetFiles(string path, string searchPattern, SearchOption searchOption)
{
    ///meth1
    while (true)
    {
        string[] searchPatterns = searchPattern.Split('|');
        List<string> files = new List<string>();
        try
        {
            foreach (string sp in searchPatterns)
                files.AddRange(System.IO.Directory.GetFiles(path, sp, searchOption));
        }
        catch (UnauthorizedAccessException UAEx)
        {
            MessageBox.Show(UAEx.Message);
            continue;
        }
        catch (PathTooLongException ex)
        {
            MessageBox.Show(ex.Message);
            continue;
        }
        files.Sort();
        return files.ToArray();
    }
}

2 个答案:

答案 0 :(得分:0)

你说:

  

如何跳到下一个文件夹..例如:如果C:// users / demo / abc是一个文件夹,并且demo没有访问权限,那么当前代码将转到Demo上的下一个文件夹..如何跳过到用户

中的下一个文件夹

您的代码不会测试该文件夹的权限,但会捕获由禁止访问的文件引起的权限异常。因此,您将无法使用此解决方案转到下一个文件夹。您需要重构整个代码。

此外,当您对文件没有权限时,您的代码似乎具有无限循环。首先,我认为你应该删除while循环并将你的trycatch表达式放在foreach循环中。这样,您的解决方案将跳过禁用的文件。 (更多!你的代码只会执行一次SearchPattern.Split)

foreach (string sp in searchPatterns)
    {
        try
        {
            files.AddRange(System.IO.Directory.GetFiles(path, sp, searchOption));
        }
        catch (UnauthorizedAccessException UAEx)
        {
            MessageBox.Show(UAEx.Message);
            continue;
        }
        catch (PathTooLongException ex)
        {
            MessageBox.Show(ex.Message);
            continue;
        }
    }

答案 1 :(得分:0)

您可以使用System.IO.DriveInfo.GetDrives()获取硬盘中的所有驱动器并重复所有这些驱动器。然后使用System.IO.Directory.GetFiles()don't keep activities搜索选项搜索该驱动器中的子目录。

System.IO.SearchOption.AllDirectories