【发布时间】:2016-05-06 13:04:27
【问题描述】:
我有一个从指定文件夹读取文件的函数。它使用 xml 文件来获取文件名及其路径。 当文件名是 Finance.csv 时它工作得很好,但现在要求发生了变化,文件名有一个时间戳(Finance_May2016.csv),配置文件有以下内容
<filename>Finance_{Date:mmmYYYY}.csv <\filename>
<Path> C:\folder <\Path>
到目前为止我有这个
public string GetFullName(string source, string path)
{
string formatPrefix = "Date";
string regex = string.Format("{{{0}(:([^}}]*))?}}", formatPrefix);
string replacement = @"(Jan|Feb|Mar|Apr|May|Jun|Jul|Aug|Sep|Oct|Nov|Dec)\d{4}";
Regex rgx = new Regex(regex);
string result = rgx.Replace(source, replacement);
FileInfo[] filePath = new DirectoryInfo(path).GetFiles();
var Filename = filePath.FirstOrDefault().Name;
var matches = Regex.Matches(Filename, result);
if (matches.Count == 1)
{
return Filename;
}
return "";
}
所以在这里我从配置文件中传递文件名和路径,它会比较文件夹中是否有与配置文件中设置的名称和DateTimeformat 匹配的文件。
到目前为止它可以工作,但是因为正则表达式是硬编码的,所以它只搜索mmmYYYY 日期格式,如果在配置文件中我设置了一个新的文件名格式,比如{Date:ddmmyyyy}_Finance.csv。当前的正则表达式不起作用。
我的问题是还有其他更优雅的方法可以实现这一目标吗?我尝试将Directory.Getfiles() 与一些搜索模式过滤器一起使用,但没有成功。
提前感谢您提供任何信息
【问题讨论】:
-
你知道你的替换包含一个正则表达式模式吗?您只需匹配
{...}中的所有内容并获取日期,然后使用DateTime.TryParse解析它。 -
感谢您的评论。请问有样品吗?谢谢维克托