为什么我的Visual Basic代码中出现“路径中的非法字符”?

时间:2012-06-19 20:51:54

标签: vb.net visual-studio-2010

我有一个包含多个子目录的目录,其中包含.doc文件。例如:

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

在下面的代码中,我试图在列表框中显示以C:\Users\tmedina\Documents\testenviroment\Released

子目录中的扩展名“.doc”结尾的所有文件

例如,我有

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错误。 关于我做错了什么的建议?

2 个答案:

答案 0 :(得分: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有一个重载,它带有您的基本路径,通配符搜索字符串以及搜索基本路径的所有子文件夹的选项。

答案 1 :(得分: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