【发布时间】:2014-08-21 19:52:50
【问题描述】:
我之前发布过类似的东西,但它是关于处理命令提示符的。在另一个例子中,我正在尝试在我执行维护的 ERP 系统中进行备份之前进行一些自动文件清理,以使流程变得顺畅(因为我对这些系统中的半打至少执行了两次维护每一个月)。所以,这里有一些正在发生的事情的例子......
以下是目录中可能出现的三个文件名:
- 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 匹配来查找正确的文件(就像我目前正在做的那样)?
【问题讨论】: