2016-11-15 65 views
-2

我怎樣才能找到硬盤滿足以下條件的所有可執行文件,如果folderis無法訪問 1.跳到下一個文件夾,而搜索 2.跳轉到下一個文件夾,如果路徑太長,而搜索如何在硬盤中找到所有的exe文件?

這裏是我的代碼:

public static string[] GetFiles(string path, string searchPattern, SearchOption searchOption) 
{ 
    ///meth1 
    while (true) 
    { 
     string[] searchPatterns = searchPattern.Split('|'); 
     List<string> files = new List<string>(); 
     try 
     { 
      foreach (string sp in searchPatterns) 
       files.AddRange(System.IO.Directory.GetFiles(path, sp, searchOption)); 
     } 
     catch (UnauthorizedAccessException UAEx) 
     { 
      MessageBox.Show(UAEx.Message); 
      continue; 
     } 
     catch (PathTooLongException ex) 
     { 
      MessageBox.Show(ex.Message); 
      continue; 
     } 
     files.Sort(); 
     return files.ToArray(); 
    } 
} 
+4

在你的問題中添加一些細節,請問標題中的問題是不可以的 – Alexis

+0

我需要得到所有的exe目前在我的硬盤上。上面的代碼只是跳過文件夾中存在的問題和長路徑問題。我需要他們解決 –

+2

您是否需要使用_access issues_訪問文件夾?那麼,如果你沒有權限,那麼......你沒有權限(並且**幸運的是,你沒有辦法做到這一點)。關於長路徑:http://stackoverflow.com/q/5188527/1207195 –

回答

0

你說:

如何跳到下一個文件夾..對於例如:如果C://用戶/演示/ ABC是一個文件夾,並演示doesn'y訪問permisison ,目前的代碼去對演示下一個文件夾..怎麼跳到下一個文件夾中的用戶

您的代碼不檢查該文件夾的權限,但捕捉引起禁止的文件訪問權限例外。因此,您將無法使用此解決方案轉到下一個文件夾。你需要重構整個代碼。

此外,當您對文件沒有權限時,您的代碼似乎具有無限循環。所以首先,我認爲你應該刪除while循環並將你的trycatch表達式放到你的foreach循環中。這樣,您的解決方案將跳過禁止的文件。 (更多!你的代碼只會做一次SearchPattern.Split)

foreach (string sp in searchPatterns) 
    { 
     try 
     { 
      files.AddRange(System.IO.Directory.GetFiles(path, sp, searchOption)); 
     } 
     catch (UnauthorizedAccessException UAEx) 
     { 
      MessageBox.Show(UAEx.Message); 
      continue; 
     } 
     catch (PathTooLongException ex) 
     { 
      MessageBox.Show(ex.Message); 
      continue; 
     } 
    } 
+0

中的下一個文件夾foreach將無法正常工作..不是它..因爲迭代是字符串 –

+0

無法將類型'char'轉換爲'字符串'\t for foreach –

0

可以使用System.IO.DriveInfo.GetDrives()得到您的硬盤的所有驅動器和迭代所有這些的。然後使用System.IO.Directory.GetFiles()System.IO.SearchOption.AllDirectories搜索選項搜索該驅動器中的子目錄。

List<string> result = new List<string>(); 
foreach (System.IO.DriveInfo driveInfo in System.IO.DriveInfo.GetDrives()) 
{ 
    result.AddRange(System.IO.Directory.GetFiles(driveInfo.Name, "*.exe", System.IO.SearchOption.AllDirectories)); 
} 
相關問題