0

わかりました。コンピューターをスキャンして.txtファイルを見つけ、リストボックスに表示するコードがあります。

        private void button2_Click(object sender, EventArgs e)
    {
     IEnumerable<string> files = System.IO.Directory.EnumerateFiles(@"C:\", "*.txt*", System.IO.SearchOption.AllDirectories);
        foreach (var f in files)
        {
            listBox1.Items.Add(String.Format("{0}", f)); 
        }
    }

これを実行するたびにエラーが発生します。それは私がゴミ箱に許可しないと言います。ゴミをスキャンするかどうかは気にしない。スキャンからゴミ箱を除外する方法はありますか?また、何か問題が発生した場合、誰かが私のコードを改善するのを手伝ってくれますか?ありがとう!

4

2 に答える 2

2

EnumerateFiles最も簡単な方法は、オペレーティングシステムのアクセス許可のために、関数が制限されたファイルにアクセスできないため、それらをtry-catchブロックの下に置くことです。

  private void SearchDrives()
  {
     foreach (String drive in Directory.GetLogicalDrives())
     {
        try
        {
           // Search for folders into the drive.
           SearchFolders(drive);
        }
        catch (Exception) { }
     }
  }
  //---------------------------------------------------------------------------

  private void SearchFolders(String prmPath)
  {
     try
     {
        foreach (String folder in Directory.GetDirectories(prmPath))
        {
           // Recursive call for each subdirectory.
           SearchFolders(folder);

           // Create the list of files.
           SearchFiles(folder);
        }
     }
     catch (Exception) { }
  }
  //---------------------------------------------------------------------------

  private void SearchFiles(String prmPath)
  {
     try
     {
        foreach (String file in Directory.GetFiles(prmPath))
        {
           FileInfo info = new FileInfo(file);
           if (info.Extension == ".txt")
           {
              listBox1.Items.Add(info.Name); 
           }
        }
     }
     catch (Exception) { }
  }
  //---------------------------------------------------------------------------

ごみ箱だけでなく、いくつかのファイルのファイルヘッダーをシステムディレクトリに読み込むこともできません。

于 2012-05-17T02:07:44.507 に答える
0

一般に、すべてのフォルダーに対して再帰呼び出しを行い、try / catchブロックを使用して、アクセスできるウィッチブロックまたはアクセスできないウィッチブロックを確認することができます。しかし、アンドラスが提案したように、私はすでに存在するものを使用して時間を節約します

あなたの例の別のアプローチ

于 2012-05-16T23:07:05.147 に答える