2

1つのファイルにマージしたいディレクトリにたくさんのtxtファイルがあります。各ファイルの最後に、キャリッジリターン/改行を追加します。

C#でこれを行うための最良の方法は何ですか?

4

4 に答える 4

3

メモリ消費にかなり依存している可能性が高いワンライナー:

File.WriteAllLines(
    targetFileName,
    Directory.GetFiles(srcFolder, "*.txt")
        .SelectMany(f=>
            File.ReadLines(f).Concat(new[] {Environment.NewLine})));

最後に余分な改行を入れて生活できることを願っています。

于 2012-11-01T19:28:58.627 に答える
1

私はあなたのためにコードを書きませんが、私はあなたを正しい方向に向けます。

  • System.IO.Directory.GetFiles()メソッドを使用して、ファイルを反復処理します
  • StreamReaderを使用して、各ファイルの後に改行を追加するバッファーにファイルを読み込みます。
  • StreamWriterを使用して、バッファを出力ファイルに書き戻します。
于 2012-11-01T19:22:19.833 に答える
1

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()最初の行の最後に追加するだけです。もちろんメモリ使用量は増加しますが、特に数十万のファイルの場合、作業ははるかに高速になります。

于 2012-11-01T19:33:40.607 に答える
0

私もあなたのためにコードを書きませんが、私はこれを行うために次のコードを使用しました、私はファイルが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();

    }
于 2012-11-01T19:25:55.587 に答える