2013-12-09 74 views
0

我想列出驅動器中的所有文件,我也在c#中嘗試此代碼。但我得到unaurthorizedfileaccess異常。 plzz給我正確的解決方案,所以我可以在我的工作繼續前進....列出驅動器中使用c文件夾和子文件夾中的所有文件#

try 
{ 
    var files = new List<string>(Directory.GetFiles("E:\", "*.*", SearchOption.AllDirectories)); 
    Method(files);   
} 
catch(Exception e) 
{ 
    Console.WriteLine(e); 
} 
static void Method(List<string> files) 
{ 
    foreach (string file in files) 
    { 
     Console.WriteLine(file); 
    } 
    Console.WriteLine(files.Count); 
} 
+0

是計算機上啓用UAC? – PCG

+0

以管理員身份運行? – PhoenixReborn

回答

1

這是正確的您的應用程序可能沒有訪問權限對某些文件夾(用於例如:系統文件夾),所以你需要處理這種情況。看起來這是不可能的。你需要的東西是這樣的:

void DiscoverDirs(string where, List<string> files) 
    { 
     try 
     { 
      files.AddRange(Directory.GetFiles(where)); 
      foreach (var dir in Directory.GetDirectories(where)) 
      { 
       DiscoverDirs(dir, files); 
      } 
     } 
     catch 
     { 
      // no access fo this dir 
     } 
    } 

,並呼籲語法:

var list = new List<string>(); 
    DiscoverDirs("E:\\", list); 

注意,這可能需要一個looooonnnng時間。

2

你可以有方法獲取在目錄中的文件和遞歸調用一個如下

static void GetAllFiles(string path, IList<string> files) 
{ 
    try 
    { 
     Directory.GetFiles(path).ToList() 
      .ForEach(f => files.Add(f)); 

     Directory.GetDirectories(path).ToList() 
      .ForEach(f => GetAllFiles(f, files)); 
    } 
    catch (UnauthorizedAccessException ex) 
    { 
     //Console.WriteLine(ex); 
    } 
} 

,那麼你可以打印結果如下

var files = new List<string>(); 
GetAllFiles(path ,files); 
Method(files); 
相關問題