ファイルに行を追加したいです。私はStreamWriterを使っています:
StreamWriter file2 = new StreamWriter(@"c:\file.txt");
file2.WriteLine(someString);
file2.Close();
私のファイルの出力は互いにいくつかの文字列の下にあるはずですが、私はこのコードを実行するたびに上書きされる1行しかありません。
StreamWriterを既存のファイルに追加させる方法はありますか?
代わりにこれを使ってください。
new StreamWriter("c:\\file.txt", true);
このStreamWriterコンストラクタのオーバーロードでは、ファイルを追加するか上書きするかを選択します。
C#4以上では、次のような構文が提供されています。
new StreamWriter("c:\\file.txt", append: true);
using (FileStream fs = new FileStream(fileName,FileMode.Append, FileAccess.Write))
using (StreamWriter sw = new StreamWriter(fs))
{
sw.WriteLine(something);
}
私はあなたがファイルに何かを書くたびにあなたが上記のコードの全てを実行していると思います。ファイルのストリームが開かれるたびに、そのシークポインタは先頭に配置されるため、すべての書き込みで前のものが上書きされます。
あなたは2つの方法で問題を解決することができます。
file2 = new StreamWriter("c:/file.txt", true);
または、ストリームポインタを自分で明示的に再配置することによっても可能です。
file2 = new StreamWriter("c:/file.txt");
file2.BaseStream.Seek(0, SeekOrigin.End);
これを試して:
StreamWriter file2 = new StreamWriter(@"c:\file.txt", true);
file2.WriteLine(someString);
file2.Close();
これを交換してください:
StreamWriter file2 = new StreamWriter("c:/file.txt");
これとともに:
StreamWriter file2 = new StreamWriter("c:/file.txt", true);
true
はテキストを追加することを示します。
this StreamWriter
コンストラクタ を2番目のパラメータ - true
と共に使用します。
別のオプションは System.IO.File.AppendText を使うことです
これは、他の人が提供したStreamWriterのオーバーロードと同等です。
また、 File.AppendAllText を使用すると、ストリームの開閉を気にせずに、インターフェイスが多少簡単になります。あなたはそれからあなた自身の改行を入れることについて心配する必要があるかもしれませんが。 :)
実際には、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");
}
}
}
もう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");
}
この行を置き換えます:
StreamWriter sw = new StreamWriter("c:/file.txt");
このコードでは:
StreamWriter sw = File.AppendText("c:/file.txt");
そして、このようにあなたの行をテキストファイルに書きます:
sw.WriteLine("text content");