Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/file/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C#在计算机中搜索文件_C#_File_Search - Fatal编程技术网

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)

我目前正在开发一个C#应用程序来搜索计算机中的文件。GUI有两个文本字段:一个用于输入(要搜索的文件的名称),另一个用于显示文件的路径(如果找到)

现在,问题是我的应用程序正在跳过我的逻辑C:驱动器。下面是一些代码:

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周期就可以找到下一个条目,它不做前期工作。你是说“报告状态”意味着你可以在当前查询中获得文件计数吗?