2012-12-19 47 views
4

我已經設法從「根」文件夾子目錄中獲取文件,但我也從這些子目錄中獲取文件目錄2,這是我不想要的。如何從確切的子目錄中獲取文件

例子:RootDirectory>Subdirectories (wanted files)>directories2 (unwanted files)

我用這個代碼:

public void ReadDirectoryContent() 
{ 
    var s1 = Directory.GetFiles(RootDirectory, "*", SearchOption.AllDirectories); 
    { 
    for (int i = 0; i <= s1.Length - 1; i++) 
    FileInfo f = new FileInfo(s1[i]); 
    . . . etc 
    } 
} 
+0

子目錄的第1級,然後在「集約」的所有文件做喲也要排除了某些目錄? – Tilak

+0

不,我想所有的目錄 – anzes

回答

6

試試這個:

var filesInDirectSubDirs = Directory.GetDirectories(RootDirectory) 
    .SelectMany(d=>Directory.GetFiles(d)); 

foreach(var file in filesInDirectSubDirs) 
{ 
    // Do something with the file 
    var fi = new FileInfo(file); 
    ProcessFile(fi); 
} 

的想法是首先選擇使用Enumerable.SelectMany方法

+0

以及我試過這個,但使用.Count方法後,我無法獲得文件長度 – anzes

+0

'SelectMany'正在返回'IEnumerable ',它不提供'長度'屬性。你可以使用簡單的'foreach'結構來代替'for'循環。檢查我的編輯代碼 –

+0

之後,我有數組問題。你有什麼建議嗎?我編輯/添加了我的代碼。 – anzes

3

你必須改變SearchOption.AllDirectoriesSearchOption.TopDirectoryOnly,因爲第一個意味着它從當前目錄獲取文件和所有子目錄。

編輯:

運算希望在直接子子目錄,而不是根目錄 搜索。

public void ReadDirectoryContent() 
{ 
    var subdirectories = Directory.GetDirectories(RootDirectory); 
    List<string> files = new List<string>(); 

    for(int i = 0; i < subdirectories.Length; i++) 
     files.Concat(Directory.GetFiles(subdirectories[i], "*", SearchOption.TopDirectoryOnly)); 
} 
+0

op要直接在子目錄中搜索,而不是根目錄) –

+0

@Steve謝謝你,編輯答案。 –

+0

我試過你的建議,但是我得到的只是子目錄長度(數字)。我想要的文件長度,這是在子目錄 – anzes

相關問題