2011-12-14 11 views
3

現在、コンピュータのファイルを検索するC#アプリケーションを開発中です。 GUIには、入力用(検索するファイルの名前)とファイルへのパスを表示用(見つかった場合)の2つのテキストフィールドがあります。C#コンピュータ内のファイルを検索

問題は、アプリケーションが論理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 
誰も私を助け、accesingときに問題が何であるかを伝えることができます

それらのフォルダ?ありがとう!

注:Windows 7 x64(.NET Framework 2.0)でMicrosoft Visual Studio 2010を使用しています。

+0

権限の問題。アプリケーションが実行されているアカウントには、それらのフォルダを参照する権限がありません。 – Oded

答えて

2
、それは誤りで処理を継続してforeachの(Directory.GetDirectoriesの文字列D(SDIR))ループにあなたのtryキャッチを移動

+0

ありがとう!それは問題でした。 –

+0

@IonutUngureanu 'GetFiles'の代わりに' EnumerateFiles'を使うべきです。あなたが持っていなければホイールを再発明しないでください。 Babcocks fix) –

+0

@ScottChamberlain - EnumerateFilesはステータスを報告しないので、両方の方法でこれをやってしまいました。そして、あなたが示唆するようにルートディレクトリで完了した場合、アプリケーションがハングアップします。 –

3

問題は、あなたが読み込み権限を持っていないフォルダを押すことです。 には、プログラムを管理者として実行するか、またはに読込み権限のないファイルやフォルダをスキップさせる必要があります。 Directory.EnumerateFilesを使用すると、コードを単純化でき、読み取り権限のないフォルダを開こうとするべきではありません。

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); 
      } 

     } 
    } 
} 
+0

私はアプリのリリース版を作成し、それを管理者として実行しました。それでも同じ問題。 : –

1

すべての

まず..私はそれは古いスレッドを知っているが、それはGoogleの中ではかなり上位に、私は、私はそれに遭遇他人のための無料のものを明確にするだろうと思った:プログラムはCにアクセスすることはできません。 \ Documents and Settingsはウィンドウ7には存在しないため、これはポインタ以外の実際のコンテンツがないシンボリックリンクです。しかし、プログラムはそれを通常のディレクトリと見なしているので、それを知らない。それが失敗した理由は、私が(キャッチ部分で任意のアクションなし)、試しにキャッチ全体を包むだろう...

..です

は、それが提案されている回答のいずれかをしようとしてから、誰かがお役に立てば幸いです。 。

関連する問題