StreamWriter를 사용하여 파일에 줄 추가


170

파일에 줄을 추가하고 싶습니다. StreamWriter를 사용하고 있습니다.

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

내 파일의 출력은 서로 아래에 여러 문자열이어야하지만이 코드를 실행할 때마다 덮어 쓰는 행이 하나뿐입니다.

StreamWriter가 기존 파일에 추가 할 수있는 방법이 있습니까?


19
폐기하는 것을 잊지 마십시오 StreamWriter. 이를 위해서는 using블록이 더 나은 구문입니다.
TheCodeKing

1
File.AppendAllText을 사용하여 파일을 매우 빠르게 업데이트 할 때 내가 스트림에 대한 걱정을하지 않으려는 이유이기도하다 - msdn.microsoft.com/en-us/library/ms143356.aspx
크리스

@TheCodeKing-그 코드를 보여줄 수 있습니까?
Steam

4
@blastousing (var stream = new StreamWriter(..)) { stream.WriteLine(..); }
TheCodeKing

답변:


279

대신 이것을 사용하십시오 :

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

이 StreamWriter 생성자 오버로드로 파일을 추가하거나 덮어 쓸 것인지 선택합니다.

C # 4 이상은 다음 구문을 제공하며 일부 구문은 더 읽기 쉽습니다.

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

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

13

파일에 무언가를 쓸 때마다 위의 모든 코드를 실행한다고 가정 합니다. 파일의 스트림이 열릴 때마다 탐색 포인터가 시작 부분에 위치하므로 모든 쓰기가 이전의 내용을 덮어 씁니다.

두 가지 방법으로 문제를 해결할 수 있습니다.

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

또는 스트림 포인터를 명시 적으로 재배치하여 :

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

파일에 10MB가 있고 위치 0에서 쓰기를 시작하지만 10kb 만 작성하면 방금 작성한 10kb 데이터 파일에 포함시킬 수 있습니까?
JobaDiniz

10

이 시도:

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

7

이것을 교체하십시오 :

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

이것으로 :

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

true 텍스트를 추가 함을 나타냅니다.



5

다른 옵션은 System.IO.File.AppendText를 사용하는 것 입니다

이것은 다른 사람들이 제공 한 StreamWriter 오버로드와 동일합니다.

또한 File.AppendAllText 는 스트림을 열고 닫을 염려없이 약간 더 쉬운 인터페이스를 제공 할 수 있습니다. 그런 다음 자신의 줄 바꿈을 넣는 것에 대해 걱정해야 할 수도 있습니다. :)


5

실제로 BaseStream.Seek에 대한 Jon의 대답 (Sep 5 '11 at 9:37) 만 내 경우에 효과가있었습니다. 고마워 존! 압축 된 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");
        }
    }
}

3

더 간단한 방법은 File.AppendTextUTF-8로 인코딩 된 텍스트를 기존 파일에 추가하거나 지정된 파일이 없으면 새 파일에 추가하는 것입니다.System.IO.StreamWriter

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

1

이 줄을 바꾸십시오 :

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

이 코드로 :

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

다음과 같이 텍스트 파일에 줄을 작성하십시오.

sw.WriteLine("text content");
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.