作爲我的應用程序的一部分,我需要讓用戶能夠從我的應用程序執行文件(視頻),但問題是應用程序不存儲這些文件的列表在應用程序本身的任何地方,關於該文件的唯一信息就是它所在的目錄,並且它必須與特定模式相匹配,如下所示:* - Ep[0-99] - *
其中*
字符表示任何字符串,整數,unicode字符等任何長度和Ep
& -
的是字符串文字和最後,[0-99]
是任何整數值0之間和99使用模式作爲文件名執行文件
這聽起來像一個每但正則表達式的問題是正則表達式需要一個字符串來匹配,然後才能找到匹配,並且如前所述,應用程序不會將此字符串存儲在任何位置,因此使用RegEx將無法工作,除非我第一次使用像FindFirst
函數來搜索文件所在的目錄,然後遍歷它,將每個文件名加載到RegEx可以匹配的變量中,但是我寧願避免這樣做,如果有更好的替代方法可用。
我也研究過MatchesMask
函數來完成這個任務,但它也遇到了使用正則表達式的相同的問題,所以我會感謝一些建議或上面已經提到的方法的替代方法。
不避免讀取文件名。您可以使用TDirectory.GetFiles而不是FindFirst/Next ..(它在內部使用FindFirst,..)。 – 2014-08-28 23:38:39
'TDirectory.GetFiles()'迭代整個目錄,(低效地)分配,然後返回找到的文件名數組。直接調用'Find(First | Next)()'可以在迭代時處理文件名。所以這取決於你需要怎麼處理這些文件,存在多少文件,你願意使用多少內存等等。設計'System.IOUtils'單元的人沒有做很好的工作。 – 2014-08-29 00:06:12
是的,TDirectory.GetFiles使用起來有點方便(雖然它使用討厭的TStringDynArray,但是)perf是可怕的。任何資深的程序員都會在實施時退縮,所以大概Emba的代碼審查政策是鬆懈的。 – 2014-08-29 05:57:17