0

在运行时,我想读取所有具有特定时间时间戳的文件。例如:如果应用程序在 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);

但是,这似乎不起作用。没有错误..没有例外..但是它不读取文件,虽然它存在。

4

2 回答 2

1

GetFiles 方法的模式参数可能还应该包含一个通配符,例如:

string temp_file_format = "ScriptLog_" + DateTime.Now.ToString("dd_MM_yyyy_HH") + "*";

这将匹配以“ScriptLog_13_09_2013_11”开头的所有文件

于 2013-09-13T10:49:40.433 回答
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);

所有这些甚至可以写成一条线(也就是说,如果您没有按源代码行数付费)。;-)

于 2013-09-13T11:18:04.853 回答