1

これが私が今そこに持っているものです。これにはたくさんの赤い線が表示されていますが、その理由はわかりません。以下に示したコードをチェックボックス メソッドに挿入して、次のラベルの付いたボタンを押したときに実行されるようにする方法を知る必要があります。

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];
    }
}
4

1 に答える 1

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();
于 2013-07-20T18:00:19.847 に答える