C#在计算机中搜索文件
我目前正在开发一个C#应用程序来搜索计算机中的文件。GUI有两个文本字段:一个用于输入(要搜索的文件的名称),另一个用于显示文件的路径(如果找到) 现在,问题是我的应用程序正在跳过我的逻辑C:驱动器。下面是一些代码:C#在计算机中搜索文件,c#,file,search,C#,File,Search,我目前正在开发一个C#应用程序来搜索计算机中的文件。GUI有两个文本字段:一个用于输入(要搜索的文件的名称),另一个用于显示文件的路径(如果找到) 现在,问题是我的应用程序正在跳过我的逻辑C:驱动器。下面是一些代码: foreach (string s in Directory.GetLogicalDrives() ) { if (list.Count == 0) { foreach (string f in Directory.GetFiles(s, file)
foreach (string s in Directory.GetLogicalDrives() )
{
if (list.Count == 0)
{
foreach (string f in Directory.GetFiles(s, file))
{
textBox2.Text = f;
list.Add(f);
}
if (list.Count == 0)
{
search(s);
}
}
}
搜索方法:
private void search(string sDir)
{
try
{
foreach (string d in Directory.GetDirectories(sDir))
{
if (list.Count == 0)
{
Console.WriteLine(d);
foreach (string f in Directory.GetFiles(d, file))
{
textBox2.Text = f;
list.Add(f);
}
if (list.Count == 0)
{
search(d);
}
}
}
}
catch (System.Exception excpt)
{
Console.WriteLine(excpt.Message);
}
}
以下是一些输出:
C:\$Recycle.Bin
C:\$Recycle.Bin\S-1-5-21-1794489696-3002174507-1726058468-1000
C:\Config.Msi
C:\de cautat
C:\de cautat\database
C:\de cautat\fut_bot
C:\de cautat\helper
C:\de cautat\images
C:\de cautat\itemiinfo
C:\de cautat\JSONs
C:\de cautat\JSONs\PLAYER
C:\de cautat\JSONs\USER
C:\de cautat\requests
C:\Documents and Settings
A first chance exception of type 'System.UnauthorizedAccessException' occurred in mscorlib.dll
Access to the path 'C:\Documents and Settings' is denied.
D:\$RECYCLE.BIN
D:\$RECYCLE.BIN\S-1-5-21-1794489696-3002174507-1726058468-1000
D:\$RECYCLE.BIN\S-1-5-21-2637989945-465084399-3498881169-1000
etc
有人能帮我告诉我在访问这些文件夹时出现了什么问题吗?谢谢
注意:我正在Windows 7 x64(.NET Framework 2.0)上使用Microsoft Visual Studio 2010。问题是您正在访问一个没有读取权限的文件夹。您需要以管理员身份运行程序,或者让程序跳过您没有读取权限的文件和文件夹。使用将使您简化代码,并且不应尝试打开它没有读取权限的文件夹
foreach (string s in Directory.GetLogicalDrives())
{
if (list.Count == 0)
{
foreach (string f in Directory.EnumerateFiles(s, file, SerchOption.AllDirectories))
{
try
{
textBox2.Text = f;
list.Add(f);
}
catch (System.Exception excpt)
{
Console.WriteLine(excpt.Message);
}
}
}
}
将您的try-catch移动到foreach(Directory.GetDirectories(sDir)中的字符串d)循环中,以便它在出错时继续处理。我知道这是一个旧线程,但它在Google中排名很高,所以我想我会为偶然发现它的其他人澄清一个免费的东西 首先:该程序无法访问C:\文档和设置,因为它在windows 7上不存在。它是一个符号链接,除了指针之外没有任何实际内容。但该程序并不知道这一点,因为它将其视为一个常规目录。这就是它失败的原因 我会用try,catch(在catch部分没有任何动作)来包装整个事情
希望它能帮助某人尝试任何建议的答案。权限问题。运行应用程序的帐户没有浏览这些文件夹的权限。我已生成应用程序的发布版本,并以管理员身份运行。还是一样的问题(谢谢!这就是问题所在。@IonutUngureanu你真的应该使用
EnumerateFiles
而不是GetFiles
,如果不需要的话,不要重新发明轮子(我发布的示例也包括M.Babcock的修复。)@ScottChamberlain-我用两种方法都这么做了,结果更复杂,因为EnumerateFiles不报告状态,如果按照您的建议在根目录上执行,它将挂起应用程序。GetFiles允许对搜索进行更精细的控制。@M.Babcock“报告状态”,我不明白你的意思。也会锁定你的机器,我指的是延迟加载的机器,它只需要CPU周期就可以找到下一个条目,它不做前期工作。你是说“报告状态”意味着你可以在当前查询中获得文件计数吗?