2014-03-06 57 views
0

我有以下代碼從MyComputer檢索所有pdf文件。但我得到如下錯誤。是否有可能使用C#代碼從一臺計算機中檢索所有pdf文件。檢索我的電腦中存在的所有pdf文件

string path = Environment.GetFolderPath(Environment.SpecialFolder.MyComputer);    
System.IO.DirectoryInfo dir = new System.IO.DirectoryInfo(path); // Error : The path is not of a legal form. 
IEnumerable<System.IO.FileInfo> fileList = dir.GetFiles("*.pdf", System.IO.SearchOption.AllDirectories); 
+0

傳遞給'DirectoryInfo'構造函數的路徑的值是什麼? – evanmcdonnal

+1

錯誤只是說,你指定一個非法的路徑。 – user959631

+1

您需要查看所有驅動器(請參閱http://stackoverflow.com/questions/781905/getting-a-list-of-logical-drives),並在子文件夾內遞歸地運行 –

回答

9

您可以獲取所有驅動器,然後獲取所有文件。

編輯:你也可以使用Directory.EnumerateFiles方法,它可以讓你獲得文件路徑,你可以將它添加到你的列表中。這將爲您提供所有文件路徑的List<string>。像:

List<string> filePathList = new List<string>(); 
foreach (DriveInfo drive in DriveInfo.GetDrives()) 
{ 
    try 
    { 
     var filenames = Directory.EnumerateFiles(drive.Name, "*.pdf", SearchOption.AllDirectories); 
     foreach (string fileName in filenames) 
     { 
      filePathList.Add(fileName); 
     } 
    } 
    catch (FieldAccessException ex) 
    { 

     //Log, handle Exception 
    } 
    catch (UnauthorizedAccessException ex) 
    { 
     //Log, handle Exception 
    } 
    catch (Exception ex) 
    { 
     //log , handle all other exceptions 
    } 
} 

舊的答案。

List<FileInfo> fileList = new List<FileInfo>(); 
foreach (var drive in System.IO.DriveInfo.GetDrives()) 
{ 
    try 
    { 
     DirectoryInfo dirInfo = new DirectoryInfo(drive.Name); 
     foreach (var file in dirInfo.GetFiles("*.pdf", SearchOption.AllDirectories)) 
      fileList.Add(file); 

    } 
    catch (FieldAccessException ex) 
    { 

     //Log, handle Exception 
    } 
    catch (UnauthorizedAccessException ex) 
    { 
     //Log, handle Exception 
    } 
    catch (Exception ex) 
    { 
     //log , handle all other exceptions 
    } 
} 
+0

我試過你的代碼,但得到錯誤。 錯誤:「訪問路徑'C:\ $ Recycle.Bin \ blahblah ... \'被拒絕」 – user3366358

+0

@ user3366358,針對該錯誤進行修改,檢查答案的編輯部分。 – Habib

+0

我得到以下錯誤爲您的舊答案。出現此錯誤後,代碼會跳到我的C驅動器中進行搜索。 System.IO.Exception設備未準備好。 at System.IO .__ Error.WinIOError(Int32 errorCode,String maybeFullPath) – user3366358

0

可以使用System.IO.DriveInfo類循環通過機器上的所有可用驅動器(電話DriveInfo.GetDrives()來獲取所有驅動器的列表)。您可能必須爲每個驅動器執行此操作,併合並所有驅動器的結果。我猜你當前的代碼有什麼問題,就是給它MyComputer文件夾不足以告訴它遍歷所有驅動器。

相關問題