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 に答える