我正在尝试在单个目录中找到具有最高日期的文件。问题是日期附加到文件名。我正在使用以下代码来尝试拉出最大日期,但是我遇到了ParseExact的问题。
//Gather all of the files in the local directory
var files = Directory.EnumerateFiles(r.getLeadLocalFile());
returnDateTime = files.Max(f => DateTime.ParseExact(f, "MMddyyXXXX.csv", CultureInfo.InvariantCulture));
我继续收到以下错误:
String was not recognized as a valid DateTime.
我可以说传入文件路径的值是因为' f'如下:
\\\\vamarnas02\\users\\meggleston\\User Files\\Leads\\110716ENH9.csv
ENH9的值可能会根据文件而改变。
如何从文件名中获取DateTime?
答案 0 :(得分:2)
这是另一种方法。不需要拆分任何东西。但是一个糟糕的文件名(与你当前的方法一样)会破坏它:
//Gather all of the files in the local directory
var files = new DirectoryInfo(r.getLeadLocalFile()).GetFiles("*.csv");
returnDateTime = files.Max(f => DateTime.ParseExact(f.Name.Substring(0, 6), "MMddyy", CultureInfo.InvariantCulture));
答案 1 :(得分:0)
尝试仅传递文件名“110716ENH9.csv”而不是文件的完整路径。
来自MSDN DateTime.ParseExact Documentation:
使用指定的格式和特定于文化的格式信息,将指定的日期和时间字符串表示形式转换为其DateTime等效形式。字符串表示的格式必须与指定的格式完全匹配。
根据您提供的内容,您的格式不完全匹配。
- 只将文件名的前6个字符传递给ParseExact函数,并将格式修改为“MMddyy”。
答案 2 :(得分:0)
您需要在解析之前拆分日期文本。以下代码段应该有所帮助。
假设变量f是文件名。
DateTime.ParseExact(f.Substring( f.LastIndexOf("\\") + 1, 6), "MMddyy", CultureInfo.InvariantCulture);
答案 3 :(得分:0)
你真的需要在这里使用ParseExact吗?因为看起来您只需要获取Int32值并在之后比较它们 另一种方法是:您可以从提供的路径中使用一些正则表达式提取日期部分。例如,你可以使用这个:
\\
然后修剪private string ExtractDateFromFilename(string filename) {
var m = Regex.Match(filename, @"\\\d{6}");
if (!string.IsNullOrEmpty(m.Value))
return m.Value.Substring(1);
return "";
}
部分。所以在循环中这样的事情:
{{1}}