[英]Regex Directory.GetFiles Illegal characters in path c#
下面的代碼觸發異常:
string[] filenames=Directory.GetFiles( "path from config",
"*MAIN.txt|*CONT.txt", SearchOption.TopDirectoryOnly).ToArray()
我想從文件名中包含MAIN.txt
或CONT.txt
的目錄MAIN.txt
所有文件拉入數組。
但是,當我運行代碼時,它給了我System.ArgumentException, Illegal characters in path exception
。
詳細說來,得到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();
這些不是正則表達式。 無論如何, 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);
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.