C#递归文件夹搜索无法正常工作
我需要帮助,因为我已经写了一个方法,可以在一台肯定存在的计算机上找到一个特殊的目录。 首先,我写了一个方法,它将遍历计算机上的每个驱动器,并为每个驱动器打开递归方法C#递归文件夹搜索无法正常工作,c#,recursion,search,directory,C#,Recursion,Search,Directory,我需要帮助,因为我已经写了一个方法,可以在一台肯定存在的计算机上找到一个特殊的目录。 首先,我写了一个方法,它将遍历计算机上的每个驱动器,并为每个驱动器打开递归方法 private string LocateOnDrives() { string result = string.Empty; string[] drives = Directory.GetLogicalDrives(); foreach (string drive in d
private string LocateOnDrives()
{
string result = string.Empty;
string[] drives = Directory.GetLogicalDrives();
foreach (string drive in drives)
{
string buffer = this.Locate(drive);
if (buffer.EndsWith(SEARCH_PATTERN))
{
return buffer;
}
}
return result;
}
这是为每个驱动器调用的方法:
private string Locate(string directory)
{
string result = string.Empty;
try
{
string[] dirs = Directory.GetDirectories(directory);
foreach (string dir in dirs)
{
if (dir.EndsWith(SEARCH_PATTERN))
{
return dir;
}
else
{
result = this.Locate(dir);
}
}
}
catch { }
return result;
}
try-catch是必需的,因为有些目录没有权限。我拥有搜索文件夹的权限,当我调试此文件夹时,它将跳转到它已找到的if条件,并将本地“result”设置为此搜索文件夹。到目前为止,这确实说明了我的意图。但是递归方法将进一步搜索,并且总体返回为string.Empty
我已经做了一些链接:
private string tragetDir;
private string Locate(string directory)
{
string result = string.Empty;
try
{
string[] dirs = Directory.GetDirectories(directory);
foreach (string dir in dirs)
{
if (dir.EndsWith(DEFAULT_GTAV_DIRECTORY_NAME))
{
targetDir = dir;
}
else
{
result = this.Locate(dir);
}
}
}
catch { }
return result;
这对我来说是可行的,但不是我想要的,因为递归方法可能会返回这个想要的文件夹
对我来说太晚了,我只想纠正这个小错误!
有人能帮帮我吗,因为我很绝望,谢谢 当您找到一个匹配项并返回它时,然后在对
Locate()
的嵌套调用中释放一次,您将匹配项分配给result
,但当您确实想要打破它时,继续循环
result = this.Locate(dir, SEARCH_PATTERN);
if (result.EndsWith(SEARCH_PATTERN))
{
break;
}
也可以考虑只使用<代码>未授权的Access异常>代码>,因为如果您没有对某个特定目录的许可,它会被抛出。
< P>这是我尝试过的一种解决方案,它现在对我起作用了:private string Locate(string directory)
{
string result = string.Empty;
string[] dirs = new string[0];
try
{
dirs = Directory.GetDirectories(directory);
}
catch { /* Ignore */ }
foreach (string dir in dirs)
{
if (dir.EndsWith(SEARCH_PATTERN))
{
result = dir;
break;
}
else
{
result = this.Locate(dir);
if (result.EndsWith(SEARCH_PATTERN))
{
break;
}
}
}
return result;
}
首先,我必须检查循环中当前的“dir”是否已经是查找的文件夹。如果不是,则循环必须在该文件夹内浏览,如果该文件夹内的结果不是所搜索的文件夹,则循环必须继续并搜索循环中的下一个文件夹。
在找到正确目录的任何情况下,循环都将“中断”并返回结果!
就是这样 这实际上帮助我犯了错误。这不是正确的解决方案,因为你我必须同时检查dir和潜在正确答案的结果。