我之前发布过类似的内容,但它是关于处理命令提示符的。与另一个实例一样,我尝试在 ERP 系统中的备份之前进行一些自动文件清理,我对其执行维护,以平滑流程(因为我对其中 6 个系统至少执行两次维护)每一个月)。所以,这里有一些正在发生的事情的例子......
以下是目录中可能显示的三个文件名:
- AP_AnalysisWrk.M4T
- AP_AnalysisWrkMPM201408211313.M4T
- AP_AnalysisWrkNG201408211313.M4T
在这三个中,后两个将是删除的候选者,而第一个需要保留。因此,最初我使用以下命令仅检索后两个:
String[] wrkFileList = Directory.GetFiles(directoryPath, "??_*Wrk??*????????????.M4T");
但是,由于某种原因,它总是返回所有三个,即使第一个与模式不匹配。在 Windows 资源管理器中使用此模式时,它仅根据需要返回后两个文件。我开发了一种使用正则表达式的解决方法,该方法有效:
Regex wrkFileMatch = new Regex("([A-z]{2}_[A-z0-9]+Wrk[A-Z0-9]{2,3}\\d{12}.(m4t|M4T))$");
不过,我对这种方法并不着迷,因为它添加了一个不必要的循环,因为我必须遍历所有结果才能获得正确的结果。就性能而言,这似乎并不那么重要,但我想了解为什么初始模式匹配无法仅返回正确的匹配项。是否有更好的方法使用 GetFiles 进行文件名过滤,或者我最好迭代目录结果并使用 RegEx 匹配来查找正确的文件(就像我目前正在做的那样)?
从文档中Directory.GetFiles Method (String, String) http://msdn.microsoft.com/en-us/library/wz42302f%28v=vs.110%29.aspx
searchPattern 可以是文字和通配符的组合,但不支持正则表达式。 searchPattern 中允许使用以下通配符说明符。
-
*
(星号):该位置有零个或多个字符。
-
?
(问号):该位置有零个或一个字符。
鉴于,AP_AnalysisWrk.M4T
确实匹配??_*Wrk??*????????????.M4T
,因为所有这些??*????????????
末尾的每个字符都可以匹配空字符串。
所以,你可以使用Directory.GetFiles()
进行粗略的初始匹配,然后使用正则表达式更精确地过滤返回结果。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)