2012-12-10 73 views
1

我遇到了嘗試通過搜索文件結構來創建列表的問題。正在嘗試製作一個基本的C#控制檯程序,它只會運行並執行此操作。在文件結構中搜索以計算子文件夾中的項目

我的結構組織如下。

網上\
X1 \ 用戶\ (很多很多的用戶文件夾)\ 搜索一個特定的子文件夾\ 此子文件夾中作出的任何文件夾中的一個文本文件列表

所以我必須能夠搜索每個用戶文件夾,然後檢查一個文件夾(這將每次都是相同的)然後在下面的格式中創建該子文件夾中找到的文件夾的列表

username(name用戶文件夾)>>特定文件夾內的文件夾名稱。

它已經很長時間了,因爲我不得不在文件結構中搜索任何東西,所以在這麼糟糕的情況下如此消隱。

** * ** * ** * ** * ****編輯!!!!!

感謝您的信息和鏈接。現在正在研究這個問題,但是想知道這是否合理並且可行。不要在我確定它看起來像不會讓事情搞砸之前進行測試。

  TextWriter outputText = new StreamWriter(@"C:\FileList.txt", true); 
     outputText.WriteLine("Starting scan through user folder"); 
     string path = @"\\X1\users"; 
     string subFolder = "^^ DO NOT USE - MY DOCS - BACKUP ^^"; 
     string [] user_folders = Directory.GetDirectories(path); 

     foreach (var folder in user_folders) 
     { 
      string checkDirectory = folder + "\\" + subFolder; 

      if (Directory.Exists(checkDirectory) == true) 
      { 
       string [] inner_folders = Directory.GetDirectories(checkDirectory); 
       foreach (var folder2 in inner_folders) 
       { 
        outputText.WriteLine(folder2); 
       } 
      } 
     } 
     outputText.WriteLine("Finishing scan through user folder"); 
     outputText.Close(); 

固定和工作!!!!不得不改變字符串[]行,使它.GetDirectories而不是.GetFiles!

+2

查看應該對你有幫助的'Directory'和'DirectoryInfo'類。 –

+0

我相信我下面發佈的第二種方法將比手動遍歷所有用戶更快 –

+0

我的修改後的代碼顯然根本不起作用。我認爲這可能是我未被引用的原始路徑。此路徑位於隨機網絡驅動器上。投入編輯我現在擁有的東西。 – Kevin

回答

2

由於巴厘島C提到,目錄類將是你的朋友在這一個。下面的例子應該讓你開始。

來源:http://social.msdn.microsoft.com/Forums/en-US/Vsexpressvcs/thread/3ea19b83-b831-4f30-9377-bc1588b94d23/

//Obviously you'll need to define the correct path. 
string path = @"My Network\X1\Users\(many many user folders)\Search for a specific sub folder \"; 

// Will Retrieve count of all files in directry and sub directries 
int fileCount = Directory.GetFiles(path, "*.*", SearchOption.AllDirectories).Length; 

// Will Retrieve count of all files in directry but not sub directries 
int fileCount = Directory.GetFiles(path, "*.*", SearchOption.TopDirectory).Length; 

// Will Retrieve count of files .txt extensions in directry and sub directries 
int fileCount = Directory.GetFiles(path, "*.txt", SearchOption.AllDirectories).Length; 

如果你需要搜索/用戶/文件夾的某些人,或者某些條件下,你可以做到以下幾點:

string path = @"PATH_TO_USERS_DIRECTORY"; 
string [] user_folders = Directory.GetFiles(path); 
foreach(var folder in user_folders) 
{ 
    if folder == "MyFolder"; 
     Process(folder); //Search the directory here. 
} 
+0

是否可以將通配符值放入路徑字段中?或者我將不得不搜索遠程用戶......然後爲用戶中的每個文件執行搜索特定文件夾。然後另一個列出該文件夾中的文件夾? – Kevin

+0

如果您只是試圖瀏覽/ Users /中的所有文件夾,則可以使用「SearchOption.AllDirectories」選項。如果您正在尋找特定用戶或想要篩選某些用戶,則可以在/ Users /中獲取所有文件並遍歷它們,只搜索您想要的文件。我會附加到答案。 – JoshVarty

+0

感謝您的信息,我發佈了一個編輯到我的原始問題(顯然我不能回答我自己的問題)與迄今爲止我不知道,如果它是有道理的,或者如果我寫我想要的方式。 – Kevin

1

嘗試以下操作執行。這將只寫到控制檯:

const string root = "<<your root path>>"; 
const string directoryToLookFor = "<<the folder name you are looking for>>"; 
foreach (var directory in Directory.EnumerateDirectories(root, "*.*", SearchOption.TopDirectoryOnly)) 
{ 
    var foundDirectory = Directory.EnumerateDirectories(directory, directoryToLookFor, SearchOption.TopDirectoryOnly).FirstOrDefault(); 
    if (!String.IsNullOrEmpty(foundDirectory)) 
    { 
     var filesInside = Directory.GetFiles(foundDirectory); 
     foreach (var file in filesInside) 
     { 
      Console.WriteLine(file); 
     } 
    } 
} 

或者你可以只是做:

foreach (var foundDirectory in Directory.EnumerateDirectories(root, directoryToLookFor, SearchOption.AllDirectories)) 
{ 
    var filesInside = Directory.GetFiles(foundDirectory); 
    foreach (var file in filesInside) 
    { 
     Console.WriteLine(file); 
    } 
} 

這將所有子目錄中進行搜索,您無需遍歷用戶的文件夾。

+0

哦,在我設法自己完成之前沒有看到這個。再次閱讀上面的評論,並認爲這是其他人的帖子。在頁面中間添加我只是沒有下去。如果我改變文件查找目錄像我不得不爲我的我相信這也會工作。 – Kevin

+0

哦,我明白了。那麼我粘貼上面的代碼工作(至少在我做的基本測試中),檢查它看看它是否有用。 –