1

我有一个包含多个子目录的目录,其中包含 .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

在下面的代码中,我试图在列表框中显示所有以扩展名“.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错误。关于我做错了什么有什么建议吗?

4

2 回答 2

2

文件系统不理解 Directory.GetFiles 中的 double*released\*\*.doc
接受一个参数的重载不喜欢部分路径规范 (....*.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 有一个重载,它采用您的基本路径、通配符搜索字符串以及搜索基本路径的所有子文件夹的选项。

于 2012-06-19T20:55:45.610 回答
1

您的问题是您滥用该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每个子目录。

于 2012-06-19T21:11:57.497 回答