2012-01-11 84 views
0

我想寫一個插入查詢,其中的數據來自一個文本文件。但是文本文件在一個文件夾內。讓我展示層次結構。如何在迭代搜索目錄時跳過目錄? (C#)

主文件夾 - >多文件夾 - >多文件夾 - >文本文件也有另一個名爲ORJ的文件夾。

每個包含該文本文件的文件夾都有另一個名爲ORJ的文件夾。我不想處理orj。只有文本文件夾和它旁邊的pdf。我該怎麼做?我找到了一個代碼,我正在修改它。順便說一句,這是C#。

void ProcessFiles(string path) 
{ 
    Stack<string> stack; 
    string[] files; 
    string[] directories; 
    string dir; 

    stack = new Stack(); 
    stack.Push(path); 

    while (stack.Count > 0) { 

     // Pop a directory 
     dir = stack.Pop(); 

     files = Directory.GetFiles(dir); 
     foreach(string file in files) 
     { 
      // Process each file 
     } 

     directories = Directory.GetDirectories(dir); 
     foreach(string directory in directories) 
     { 
      // Push each directory into stack 
      stack.Push(directory); 
     } 
    } 
} 
+3

看看關鍵字'繼續' – 2012-01-11 09:59:18

+2

什麼樣的遞歸類的奇怪的方式順便說一句。 – TJHeuvel 2012-01-11 09:59:37

回答

2

是否有必要用棧做到這一點?

你可以遞歸樹倒反而

void ProcessFolder(string path) { 

    // Process the files 
    foreach(var file in Directory.GetFiles(path)) { 
     // Process each file 
    } 

    // process the sub folders 
    foreach (var subFolder in Directory.GetDirectories(path).Where(fld => System.IO.Path.GetFilename(fld) != "ORJ")) { 
     ProcessFolder(subFolder); 
    } 

} 

心連心, 艾倫。

0

在你的代碼中的某個地方,你必須檢查目錄的名稱,然後不添加它到你的堆棧。

例如:

directories = Directory.GetDirectories(dir); 
    foreach(string directory in directories) 
    { 
     if(directory != "ORJ")    // Push each directory except orj into stack 
      stack.Push(directory); 
    } 
+0

我試過了。它沒有工作。如果沒有任何幫助,目錄等於c:// sth/sth/sth/Orj,我將解析它並編寫if。 – Gece 2012-01-11 10:04:18

+0

@Gece,那麼'directory.EndsWith(「ORJ」)''怎麼樣? – tafa 2012-01-11 10:07:28

+0

然後參考有關如何獲取文件名(提示)的文檔。 – TJHeuvel 2012-01-11 10:07:57