簡體   English   中英

正則表達式Directory.GetFiles路徑c#中的非法字符

[英]Regex Directory.GetFiles Illegal characters in path c#

下面的代碼觸發異常:

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

我想從文件名中包含MAIN.txtCONT.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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM