2011-08-24 97 views
1

我正在尋找一種方法來處理這些文件夾中的所有文件和文件夾及文件。如何在目錄層次結構中輸出每個文件和文件夾

作爲一個例子。

,如果我有

- Root 
+ file1 
+ file2 
-- Directory 
-+ file1 
-+ file2 
---Directory 
--+ file1 
--+ file2 

我想能夠輸出在程序這些文件中的每一個,這樣它會像:

root/file1 
root/file2 
root/Directory/file1 
root/Directory/file2 
root/Directory/Directory/file1 
root/Directory/Directory/file2 

至於匹配的文件夾層次。

有沒有辦法做到這一點?

感謝

回答

2

下面的例子不正是你想要什麼: -

http://www.dotnetperls.com/recursively-find-files

+0

你需要將你的根目錄路徑傳遞給靜態的'FileHelper'類,它會給你一個所有的列表文件和目錄中的文件夾,你可以枚舉它們並以任何你想要的方式使用,枚舉也可以在main方法中完成,如果你有任何疑問,請告訴我。 – teenup

+0

感謝這個例子。 –

0

你可以使用System.IO.Directory.GetFiles(..,..,System.IO.SearchOption.AllDirectories),返回文件和全路徑名數組,然後打印該數組。如果需要排序,則可以遞歸循環訪問目錄,而不是在每個目錄上使用System.IO.Directory.GetFiles(..,..,System.IO.SearchOption.TopDirectoryOnly)。

1

使用DirectoryInfo類,您的System.IO中的FileInfo類來獲取這些細節。

public void PrintAllFiles() 
    { 
     DirectoryInfo obj = new DirectoryInfo("E:\\"); 
     foreach (var k in obj.GetFiles()) 
     { 
      Console.WriteLine(k.FullName); 
     } 
    } 
1

使用LINQ對於一些提升

var di=new DirectoryInfo(folderPath); 
var files=di.GetFiles("*",SearchOption.AllDirectories).Select(f=>f.FullName.Substring(di.FullName.Length+1)); 

錯過的子獲得的完整路徑。或者,如果你只是想根對象的文件夾名稱(例如,如果你沒有C:\用戶\鮑勃\魚的目錄,你只是想魚\文件夾,你會做下列..

var di=new DirectoryInfo(folderPath); 
var basePath=Path.GetDirectoryName(folderPath); 
var files=di.GetFiles("*",SearchOptions.AllDirectorys).Select(f=>f.FullName.Substring(basePth.Length+1)); 

如果你可以在語句結尾標記一個額外的.Select(f=>f.Replate(@"\","/")),你可以使用/作爲路徑分隔符而不是\

相關問題