在计算机上寻找文件

时间:2013-07-20 15:39:18

标签: c#

所以这就是我现在所拥有的。我在这里得到了很多红线,不知道为什么。我需要知道如何获取下面你给我的代码并将其放入一个复选框方法,以便当你点击下一个标记的按钮时它会运行。

public Question()
{
    InitializeComponent();
}

private void Question_Load(object sender, EventArgs e)
{}

private void Exit_Click(object sender, EventArgs e)
{
    Close();
}

private void UnRe_CheckedChanged(object sender, EventArgs e)
{
    if (UnRe.Checked == true)
    {
        string rootDirectory = System.IO.DriveInfo.GetDrives()[0].RootDirectory.FullName;

        string[] files = System.IO.Directory.GetFiles( rootDirectory,
                        "file.exe", System.IO.SearchOption.AllDirectories);
    }
}// closes class

private void Infection_CheckedChanged(object sender, EventArgs e)
{
    if (Support.Checked == true)
    {}
}

private void Other_CheckedChanged(object sender, EventArgs e)
{}

private void Next_Click(object sender, EventArgs e)
{}

IEnumerable<string> GetAllAuthorizedFiles(string root, string searchPattern)
{
    foreach (var fname in GetAuthorizedFiles(root, searchPattern))
        yield return fname;

    foreach (var dir in GetAuthorizedDirectories(root))
    {
        foreach (var fname in GetAllAuthorizedFiles(dir, searchPattern))
            yield return fname;
    }
}

string[] GetAuthorizedDirectories(string root)
{
    try
    {
        return Directory.GetDirectories(root);
    }
    catch (UnauthorizedAccessException)
    {
        return new string[0];
    }
}

string[] GetAuthorizedFiles(string root, string searchPattern)
{
    try
    {
        return Directory.GetFiles(root, searchPattern);
    }
    catch (UnauthorizedAccessException)
    {
        return new string[0];
    }
}

1 个答案:

答案 0 :(得分:1)

如果时间不是你所说的问题,你可以遍历试图获取文件的所有目录。每当你遇到UnauthorizedAccessExcpetion时,你只需忽略该目录并移动到下一个目录。

以下是Hans Passant建议的递归文件枚举方法的实现:

IEnumerable<string> GetAllAuthorizedFiles(string root, string searchPattern)
{
    foreach (var fname in GetAuthorizedFiles(root, searchPattern))
        yield return fname;

    foreach (var dir in GetAuthorizedDirectories(root))
    {
        foreach (var fname in GetAllAuthorizedFiles(dir, searchPattern))
            yield return fname;
    }
}

string[] GetAuthorizedDirectories(string root)
{
    try
    {
        return Directory.GetDirectories(root);
    }
    catch (UnauthorizedAccessException)
    {
        return new string[0];
    }
}

string[] GetAuthorizedFiles(string root, string searchPattern)
{
    try
    {
        return Directory.GetFiles(root, searchPattern);
    }
    catch (UnauthorizedAccessException)
    {
        return new string[0];
    }
}

以下是您从代码中调用它的方式:

string[] files = GetAllAuthorizedFiles(rootDirectory, "File.exe").ToArray();