2012-02-13 68 views
2

我想檢索我在目錄中的所有文件夾中的所有文件。c#遞歸文件夾和文件目錄

但結果是相當隨機..

我想的foreach是錯的..

我不明白的是爲什麼呢?

因爲在所有文件夾中,我們檢查所有文件,然後顯示所有文件的鏈接按鈕。但實際上它顯示了很多文件夾,兩次。

var DI = new DirectoryInfo("C://inetpub//wwwroot//ClientPortal//Files//") 
       .GetDirectories("*.*", System.IO.SearchOption.AllDirectories); 

foreach (System.IO.DirectoryInfo D1 in DI) 
{ 
    System.IO.FileInfo[] fiArr = D1.GetFiles(); 

    foreach (System.IO.FileInfo file in fiArr) 
    { 
     LinkButton lktest = new LinkButton(); 
     lktest.Text = D1.Name; 
     form1.Controls.Add(lktest); 
     form1.Controls.Add(new LiteralControl("<br>")); 
    } 
} 

有人能幫助我嗎?

非常感謝!

+0

這種事情應該是很容易調試假設你是在一個位置,附加一個調試器...只需一步一步地運行,每次你添加一個新的控制檢查的東西,以確定你是否得到正確的價值,如果沒有什麼事情不像你期望的那樣... – Chris 2012-02-13 17:04:10

回答

5

顯示所有文件的鏈接按鈕

在這裏,我們創建具有設置爲目錄名的鏈接按鈕時,它聽起來就像你想要的文件相反(即file.Name而不是D1.Name)

lktest.Text = D1.Name; 
2

這有幫助嗎?

http://www.dreamincode.net/code/snippet1669.htm

public void GetDirStructure(string path) 
{ 
    try 
    { 
     DirectoryInfo dir = new DirectoryInfo(path); 
     DirectoryInfo[] subDirs = dir.GetDirectories(); 
     FileInfo[] files = dir.GetFiles(); 
     foreach(FileInfo fi in files) 
     { 
      Console.WriteLine(fi.FullName.ToString()); 
     } 

     if (subDirs != null) 
     { 
      foreach (DirectoryInfo sd in subDirs) 
      { 
       GetDirStructure(path + @"\\" + sd.Name); 
      } 
     } 
    } 
    catch(Exception ex) 
    { 
     Console.WriteLine(ex.Message.ToString()); 
    } 
} 
1

該fi代碼的第一行看起來是罪魁禍首:

System.IO.DirectoryInfo[] DI = new System.IO.DirectoryInfo("C://inetpub//wwwroot//ClientPortal//Files//").GetDirectories("*.*", System.IO.SearchOption.AllDirectories); 

嘗試使用以下:

DirectoryInfo[] DI = new DirectoryInfo("C://inetpub//wwwroot//ClientPortal//File//").GetDirectories(); 
+0

爲什麼? ...更多字符... – 2012-02-13 17:00:48

+0

重點是使用'DirectoryInfo.GetDirectories()'方法的正確重載。 – Bernard 2012-02-13 17:03:28

+0

但是爲什麼一個OP使用錯誤和您的建議權? – 2012-02-13 17:21:42

相關問題