2016-09-28 27 views
0

我有組合框,我選擇它的文件夾名稱。該文件夾必須先被搜索。在這些文件夾中還有名爲「版本」的文件夾 - 並且這些文件夾還有另一個需要在Listview上添加的文件夾。我試過,但沒有被添加到我的列表視圖:添加子文件夾名的ListView

Dim Folder_To_Search As String() = IO.Directory.GetDirectories("D:\", MyCombo.Text, System.IO.SearchOption.AllDirectories) 

      For Each folder As String In Folder_To_Search 
       ListView1.Items.Add(Path.GetFileName(folder + "\Versions\")) 
      Next 

我想我以後+失去了一些東西「\版本\」,有人可以給我一個線索?

+0

'Path.GetFileName()'會從傳遞的字符串的文件名 - 你傳遞一個路徑或部分路徑。你是否試圖從該路徑獲取文件名? – Plutonix

+0

@Plutonix yes,來自例如文件夾的文件夾名稱D:\ Microsoft \ Versions \ ... – LuckyLuke82

+0

請不要將字符串與加號('+')連接起來,它主要是加法運算符。 VB.NET使用&符號('&')作爲其本地連接運算符。通過使用它,你將避免陷入諸如[這裏]描述的問題(http://stackoverflow.com/a/734631/3740093)。 –

回答

1

什麼也沒有被添加到你的列表視圖,因爲GetDirectories返回,顧名思義,目錄。所以你得到你的目錄列表,然後在它們的每一個上使用Path.GetFilename,但是目錄沒有在它們末尾的文件名,所以只有空字符串被添加到你的列表視圖中。


編輯註釋:然後它聽起來像你需要基本上運行兩個嵌套的目錄搜索;第一個像「微軟」的文件夾,第二個微軟的文件夾,然後通過環內「版本」,並得到了文件:

Dim TopLevelDirectories As String() = IO.Directory.GetDirectories("D:\", "*" & MyCombo.Text & "*", System.IO.SearchOption.AllDirectories) 
    For Each tlDir As String In TopLevelDirectories 
     Dim SubLevelDirectories As String() = IO.Directory.GetDirectories(tlDir, "*Versions*", System.IO.SearchOption.AllDirectories) 
     For Each slDir As String In SubLevelDirectories 
      Dim dInfo As DirectoryInfo = New DirectoryInfo(slDir) 
      Dim fInfo() As FileInfo = dInfo.GetFiles 
      For Each f As FileInfo In fInfo 
       ListView1.Items.Add(f.FullName) 'or ListView1.Items.Add(f.Name) 
      Next 
     Next 
    Next 

如果我正確理解你的目標,上面的代碼應該找到的所有文件您正在尋找。我做了一些測試文件夾,不同層次的目錄扔微軟/版本中,且該代碼拿起它們加起來

+0

感謝您的回覆和解釋。我現在明白你的觀點。但是,您的代碼不起作用。我沒有詳細說明:「微軟」不在「D:\微軟」中,它也可以位於「D:\ SomeFolder \ Microsoft \」中。因此,必須先搜索Microsoft文件夾,這就是爲什麼我使用SearchOption.Alldirectories。和你一樣的Combobox並置不會這樣做。 – LuckyLuke82

+0

你不能先搜索「Microsoft」的位置,然後把位置放在一個變量中,然後繼續在答案中的代碼? –

+0

我誤解你的目標,我編輯的代碼,我認爲它會爲你想現在完成 – soohoonigan

相關問題