web-dev-qa-db-ja.com

StreamWriterを使ってファイルに行を追加する

ファイルに行を追加したいです。私はStreamWriterを使っています:

StreamWriter file2 = new StreamWriter(@"c:\file.txt");
file2.WriteLine(someString);
file2.Close();

私のファイルの出力は互いにいくつかの文字列の下にあるはずですが、私はこのコードを実行するたびに上書きされる1行しかありません。

StreamWriterを既存のファイルに追加させる方法はありますか?

154
Waypoint

代わりにこれを使ってください。

new StreamWriter("c:\\file.txt", true);

このStreamWriterコンストラクタのオーバーロードでは、ファイルを追加するか上書きするかを選択します。

C#4以上では、次のような構文が提供されています。

new StreamWriter("c:\\file.txt", append: true);
255
 using (FileStream fs = new FileStream(fileName,FileMode.Append, FileAccess.Write))
 using (StreamWriter sw = new StreamWriter(fs))
 {
    sw.WriteLine(something);
 }
141
Andrey Taptunov

私はあなたがファイルに何かを書くたびにあなたが上記のコードの全てを実行していると思います。ファイルのストリームが開かれるたびに、そのシークポインタは先頭に配置されるため、すべての書き込みで前のものが上書きされます。

あなたは2つの方法で問題を解決することができます。

file2 = new StreamWriter("c:/file.txt", true);

または、ストリームポインタを自分で明示的に再配置することによっても可能です。

file2 = new StreamWriter("c:/file.txt");
file2.BaseStream.Seek(0, SeekOrigin.End);
12
Jon

これを試して:

StreamWriter file2 = new StreamWriter(@"c:\file.txt", true);
file2.WriteLine(someString);
file2.Close();
10
Marco

これを交換してください:

StreamWriter file2 = new StreamWriter("c:/file.txt");

これとともに:

StreamWriter file2 = new StreamWriter("c:/file.txt", true);

trueはテキストを追加することを示します。

7
Waqas

this StreamWriterコンストラクタ を2番目のパラメータ - trueと共に使用します。

5

別のオプションは System.IO.File.AppendText を使うことです

これは、他の人が提供したStreamWriterのオーバーロードと同等です。

また、 File.AppendAllText を使用すると、ストリームの開閉を気にせずに、インターフェイスが多少簡単になります。あなたはそれからあなた自身の改行を入れることについて心配する必要があるかもしれませんが。 :)

5
Chris

実際には、BaseStream.Seekを使ったJonの答え(9月5日、11:5、9:37)だけが私のケースではうまくいきました。 Jonありがとう!私はZipアーカイブtxtファイルに行を追加する必要がありました。

using (FileStream zipFS = new FileStream(@"c:\Temp\SFImport\test.Zip",FileMode.OpenOrCreate))
{
    using (ZipArchive Arch = new ZipArchive(zipFS,ZipArchiveMode.Update))
    {
        ZipArchiveEntry entry = Arch.GetEntry("testfile.txt");
        if (entry == null)
        {
            entry = Arch.CreateEntry("testfile.txt");
        }
        using (StreamWriter sw = new StreamWriter(entry.Open()))
        {
            sw.BaseStream.Seek(0,SeekOrigin.End);
            sw.WriteLine("text content");
        }
    }
}
4
Veroslav Olic

もう1つの簡単な方法は、File.AppendTextを使用して、UTF-8エンコードされたテキストを既存のファイルに追加するか、指定されたファイルが存在しない場合に新しいファイルに追加してSystem.IO.StreamWriter

using (System.IO.StreamWriter sw = System.IO.File.AppendText(logFilePath + "log.txt"))
{                                                
    sw.WriteLine("this is a log");
}
2
Vinod Srivastav

この行を置き換えます:

StreamWriter sw = new StreamWriter("c:/file.txt");

このコードでは:

StreamWriter sw = File.AppendText("c:/file.txt");

そして、このようにあなたの行をテキストファイルに書きます:

sw.WriteLine("text content");
1
Shahaf