如何在硬盘上找到满足以下条件的所有可执行文件 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();
}
}
答案 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