2012-06-19 24 views
1

我有一個包含.doc文件的多個子目錄的目錄。例如:爲什麼在我的Visual Basic代碼中得到「路徑中的非法字符」?

C:\Users\tmedina\Documents\testenviroment\Released\500\test0.doc 
C:\Users\tmedina\Documents\testenviroment\Released\501\test1.doc 
C:\Users\tmedina\Documents\testenviroment\Released\502\test2.doc 
... 
C:\Users\tmedina\Documents\testenviroment\Released\520\test20.doc 

在下面我的代碼,我想在列表框中顯示所有擴展名爲「.DOC」結束是在C:\Users\tmedina\Documents\testenviroment\Released

因此,例如子目錄中的文件,我有

Dim root As String = "C:\Users\tmedina\Documents\testenviroment" 

For Each fileFound As String In Directory.GetFiles(Path.Combine(root, "Released\*\*.doc")) 
     ListBox1.Items.Add(fileFound) 
    Next 

但它一直拋出Illegal characters in path錯誤。 關於我在做什麼的任何建議是錯誤的?

回答

1

文件系統不理解一倍released\*\*.doc
Directory.GetFiles * oveload那只有一個參數不喜歡的部分路徑規範(.... *。DOC)

這種嘗試

Dim root As String = "C:\Users\tmedina\Documents\testenviroment\released" 

For Each fileFound As String In Directory.GetFiles(root, "*.doc", SearchOption.AllDirectories)) 
    ListBox1.Items.Add(fileFound) 
Next 

Visual Basic語言不需要轉義\字符。
該Directory.GetFiles具有重載,把你的基本路徑,一個通配符搜索字符串,並搜索所有的基本路徑的子文件夾的選項。

+0

啊,在'SearchOption.AllDirectories'漂亮的呼叫。我不會使用這些方法,因爲我正在離開工作,所以我很着急發佈答案,所以我沒有機會檢查所有重載。希望你不介意我是否會爲了我的回答而偷竊。我討厭離開我的回答失修。 –

0

你的問題是你是濫用GetFiles方法。如果你想通過一個搜索字符串,如「* .DOC」,你必須這樣做的第二個參數,如:

Directory.GetFiles(Path.Combine(root, "Released"), "*.doc") 

而且,你不能給它一個包含通配符的文件夾路徑,例如「C:\ Users \ tmedina \ Documents \ testenviroment \ Released *」。如果你希望所有子文件夾,則需要指定第三個參數的搜索選項:

Directory.GetFiles(Path.Combine(root, "Released"), "*.doc", SearchOption.AllDirectories) 

除非出於某種原因,你不希望它來搜索所有子孫目錄,只希望它搜索的直接子目錄。在這種情況下,您必須使用Directory.GetDirectories來獲取所有直接子目錄的列表,然後遍歷它們,每個子目錄調用GetFiles

相關問題