以下代码触发异常:
string[] filenames=Directory.GetFiles( "path from config",
"*MAIN.txt|*CONT.txt", SearchOption.TopDirectoryOnly).ToArray()
我想从文件名中包含MAIN.txt
或CONT.txt
的目录中将所有文件拉入数组。
但是当我运行代码时,它给了我System.ArgumentException, Illegal characters in path exception
。
答案 0 :(得分:2)
要进一步详细说明,得到ArgumentException
的原因是第二个参数无效。
您正在使用的Directory.GetFiles
方法的重载期望有string path
,string searchPattern
和SearchOption searchOption
。
searchPattern
不是正则表达式。您只能使用*和?的组合字符。
来自文档:
与路径中文件名匹配的搜索字符串。这个 参数可以包含有效文字路径和通配符的组合 (*和?)字符,但不支持正则表达式。
使用System.Linq
Concat
扩展方法的替代实现:
string[] mainFileNames = Directory.GetFiles(@"/Some/Path", "*MAIN.txt", SearchOption.TopDirectoryOnly);
string[] contFileNames = Directory.GetFiles(@"/Some/Path", "*CONT.txt", SearchOption.TopDirectoryOnly);
string[] allFileNames = mainFileNames.Concat(contFileNames).ToArray();
答案 1 :(得分:1)
这些不是正则表达式。无论如何,Directory.GetFiles
不支持带有|
字符的文件名表达式。您需要调用该方法两次,然后将数组组合在一起。
string[] mainNames=Directory.GetFiles("path from config","*MAIN.txt",SearchOption.TopDirectoryOnly);
string[] contNames=Directory.GetFiles("path from config","*CONT.txt",SearchOption.TopDirectoryOnly);
string[] fileNames= new string[mainNames.Length + contNames.Length];
Array.Copy(mainNames, fileNames, mainNames.Length);
Array.Copy(contNames, 0, fileNames, mainNames.Length, contNames.Length);