2012-09-08 88 views

回答

0

查看Directory.GetFiles()及相關方法。

+0

我無法找到一種方法來列出所有文件,而不必使用此方法獲取UnauthorizedAccessException。 –

+1

你將不得不付出一些努力來解決這個問題。通過這些方法查看是否有獲取權限的方法。但是,最終,您總是可以捕獲異常,並且如果您得到該異常,那麼您的程序知道它無法訪問該特定位置。 –

+0

這是因爲您沒有足夠的權限來訪問硬盤驅動器上的所有目錄。您應該簡單地用try塊包裝呼叫並管理這些錯誤。 – Eilistraee

0

您可以

var files = from file in Directory.EnumerateFiles(@"your Path", "*.*", SearchOption.AllDirectories) 
      select file; 
7

嘗試請嘗試使用代碼:

private static IEnumerable<string> Traverse(string rootDirectory) 
{ 
    IEnumerable<string> files = Enumerable.Empty<string>(); 
    IEnumerable<string> directories = Enumerable.Empty<string>(); 
    try 
    { 
     // The test for UnauthorizedAccessException. 
     var permission = new FileIOPermission(FileIOPermissionAccess.PathDiscovery, rootDirectory); 
     permission.Demand(); 

     files = Directory.GetFiles(rootDirectory); 
     directories = Directory.GetDirectories(rootDirectory); 
    } 
    catch 
    { 
     // Ignore folder (access denied). 
     rootDirectory = null; 
    } 

    if (rootDirectory != null) 
     yield return rootDirectory; 

    foreach (var file in files) 
    { 
     yield return file; 
    } 

    // Recursive call for SelectMany. 
    var subdirectoryItems = directories.SelectMany(Traverse); 
    foreach (var result in subdirectoryItems) 
    { 
     yield return result; 
    } 
} 

客戶端代碼:

var paths = Traverse(@"Directory path"); 
File.WriteAllLines(@"File path for the list", paths); 
+0

@aiodintsov,當然!由於Windows UAC。您可以爲您的應用程序添加清單(http://www.codeproject.com/Articles/17968/Making-Your-Application-UAC-Aware)以使用高程。 –

0

使用遍歷塞爾建議和DriveInfo類,你可以有訪問可用於PC的所有文件。

DriveInfo[] allDrives = DriveInfo.GetDrives(); 

foreach (DriveInfo d in allDrives) 
{ 
    if (d.IsReady == true) 
    { 
     var paths = Traverse(d.Name); 
     File.AppendAllLines(@"File path for the list", paths); 
    } 
} 
0

嘗試

string[] files = Directory.GetFiles(@"C:\\", "*.*", SearchOption.AllDirectorys); 

這應該給你包含硬盤上的所有文件陣列。

相關問題