1つのファイルにマージしたいディレクトリにたくさんのtxtファイルがあります。各ファイルの最後に、キャリッジリターン/改行を追加します。
C#でこれを行うための最良の方法は何ですか?
1つのファイルにマージしたいディレクトリにたくさんのtxtファイルがあります。各ファイルの最後に、キャリッジリターン/改行を追加します。
C#でこれを行うための最良の方法は何ですか?
メモリ消費にかなり依存している可能性が高いワンライナー:
File.WriteAllLines(
targetFileName,
Directory.GetFiles(srcFolder, "*.txt")
.SelectMany(f=>
File.ReadLines(f).Concat(new[] {Environment.NewLine})));
最後に余分な改行を入れて生活できることを願っています。
私はあなたのためにコードを書きませんが、私はあなたを正しい方向に向けます。
Directory.EnumerateFiles
これは、ファイル名を検出したときにファイル名をストリーミングするため、大きなディレクトリに適した宣言型のアプローチです。
var lines = from file in Directory.EnumerateFiles(directory, "*.txt")
from line in File.ReadLines(file).Concat(new[]{Environment.NewLine})
select line;
File.WriteAllLines(outputFileName, lines);
このアプローチの利点:
読みやすく、理解しやすい
多くのファイル(> 10000)がある場合は並列化可能:
.AsParallel()
最初の行の最後に追加するだけです。もちろんメモリ使用量は増加しますが、特に数十万のファイルの場合、作業ははるかに高速になります。
私もあなたのためにコードを書きませんが、私はこれを行うために次のコードを使用しました、私はファイルが1.txt、2.txtなどの名前であったことを覚えていますので私はフォルダ全体をループすることができました
private void merge()
{
string[] fullFile = new string[152];
System.IO.StreamWriter data = new System.IO.StreamWriter(filepath);
for (int i = 1; i < 152; i++)
{
try
{
string fullfile = System.IO.File.ReadAllText(filepath);
data.WriteLine(fullfile + "return\n");
}
catch { }
}
data.Close();
}