在运行时,我想读取所有具有特定时间时间戳的文件。例如:如果应用程序在11:00运行: - ,则应该读取11:00:00之后创建的所有文件(不包括当前文件),并且必须写入当前文件。我有尝试过:
string temp_file_format = "ScriptLog_" + DateTime.Now.ToString("dd_MM_yyyy_HH");
string path = @"C:\\ScriptLogs";
var all_files = Directory.GetFiles(path, temp_file_format).SelectMany(File.ReadAllLines);
using (var w = new StreamWriter(logpath))
foreach (var line in all_files)
w.WriteLine(line);
但是,这似乎并没有起作用。没有错误......没有例外。但是它存在时不会读取文件。
答案 0 :(得分:1)
GetFiles方法的pattern参数可能还应该包含一个通配符,如:
string temp_file_format = "ScriptLog_" + DateTime.Now.ToString("dd_MM_yyyy_HH") + "*";
这将匹配以“ScriptLog_13_09_2013_11”
开头的所有文件答案 1 :(得分:0)
由于@Edwin已经解决了您的问题,我只想添加一个关于您的代码的建议(主要是与性能相关的)。
由于您只是读取这些行以便将它们写入不同的文件并将其从内存中丢弃,因此您应该考虑使用File.ReadLines
而不是File.ReadAllLines
,因为后一种方法会加载所有行每个文件都不必要地进入内存。
将此与File.WriteAllLines
方法相结合,您可以在减少内存压力的同时简化代码:
var all_files = Directory.GetFiles(path, temp_file_format);
// File.ReadLines returns a "lazy" IEnumerable<string> which will
// yield lines one by one
var all_lines = all_files.SelectMany(File.ReadLines);
// this iterates through all_lines and writes them to logpath
File.WriteAllLines(logpath, all_lines);
所有这些甚至可以写成一行(也就是说,如果您的源代码行数没有支付)。 ; - )