正则表达式Directory.GetFiles路径c#中的非法字符

时间:2018-09-28 21:37:07

标签: c# asp.net

以下代码触发异常:

string[] filenames=Directory.GetFiles( "path from config",
"*MAIN.txt|*CONT.txt", SearchOption.TopDirectoryOnly).ToArray()

我想从文件名中包含MAIN.txtCONT.txt的目录中将所有文件拉入数组。
 但是当我运行代码时,它给了我System.ArgumentException, Illegal characters in path exception

2 个答案:

答案 0 :(得分:2)

要进一步详细说明,得到ArgumentException的原因是第二个参数无效。

您正在使用的Directory.GetFiles方法的重载期望有string pathstring searchPatternSearchOption 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);