2011-09-05 12 views
128

ファイルに行を追加します。私のファイルの出力は互いに以下の複数の文字列でなければなりませんStreamWriterを使用してファイルに行を追加します。

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

が、私はこのコードを実行するたびに上書きされるだけの行を、持っている:私はのStreamWriterを使用しています。

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

+15

は 'StreamWriter'を配置することを忘れないでください返します。 'using'ブロックはこれのためのよりよい構文です。 – TheCodeKing

+1

これは、File.AppendAllTextを使用してファイルをすばやく更新するときにストリームについて心配したくない理由です。http://msdn.microsoft.com/en-us/library/ms143356.aspx – Chris

+0

@TheCodeKing - Canあなたは私にそれを行うためのいくつかのコードを表示しますか? – Steam

答えて

213

使用この代わりに:

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

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

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

trueがそれことを示しています。これで

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

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

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

:上記

C#4とは、いくつかは、より読み見つけ、次の構文を提供していますテキストを追加します。 true - 第二パラメータと

129
using (FileStream fs = new FileStream(fileName,FileMode.Append, FileAccess.Write)) 
using (StreamWriter sw = new StreamWriter(fs)) 
{ 
    sw.WriteLine(something); 
} 
8

これを試してみてください:

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

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

次の2つの方法で問題を解決することができますいずれかの便利な

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

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

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

ファイルが10MBで、位置0から10KBだけ書き出しを開始したらどうすればファイル*のみに今書いた10KBのデータが含まれていることを保証できますか? – JobaDiniz

5

別のオプションは、System.IO.File.AppendText

これを使用しています他の人が行ったStreamWriterオーバーロードと同等です。

またFile.AppendAllTextは、ストリームを開閉心配することなく、わずかに容易にインターフェースを与える可能性があります。あなたはあなた自身の改行を入れることを心配する必要があるかもしれませんが。 :)

4

は実際にのみBaseStream.SeekとJonの答え(9時37分で、9月5日'11は)私の場合のために働きました。ありがとうジョン! に、行を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

この行を置き換えます。このコードで

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

を:その後、

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

と、このようなテキストファイルにあなたの行を記述します。

sw.WriteLine("text content"); 
2

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

using (System.IO.StreamWriter sw = System.IO.File.AppendText(logFilePath + "log.txt")) 
{             
    sw.WriteLine("this is a log"); 
} 
関連する問題