我有一个包含多个子目录的目录,其中包含.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
例如,我有
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
错误。
关于我做错了什么的建议?
答案 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
。