Добавление строк в файл с помощью StreamWriter - программирование

Добавление строк в файл с помощью StreamWriter

Я хочу добавить строки в свой файл. Я использую StreamWriter:

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

Выход моего файла должен быть несколько строк ниже друг друга, но у меня есть только одна строка, которая перезаписывается каждый раз, когда я запускаю этот код.

Можно ли добавить StreamWriter в существующий файл?

4b9b3361

Ответ 1

Используйте это вместо:

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

С этой перегрузкой конструктора StreamWriter вы выбираете, добавляете ли вы файл или перезаписываете его.

С# 4 и выше предлагает следующий синтаксис, который некоторые считают более читаемым:

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

Ответ 2

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

Ответ 3

Я предполагаю, что вы выполняете весь вышеприведенный код каждый раз, когда вы пишете что-то в файл. Каждый раз, когда поток для файла открывается, его указатель поиска позиционируется в начале, поэтому все записи в конечном итоге переписывают то, что было до этого.

Вы можете решить проблему двумя способами: либо с удобным

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

или путем прямого перемещения указателя потока непосредственно:

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

Ответ 4

Замените это:

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

с этим:

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

true указывает, что он добавляет текст.

Ответ 5

Попробуйте следующее:

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

Ответ 7

Другая опция - System.IO.File.AppendText

Это эквивалентно перегрузкам StreamWriter, предоставленным другими.

Также File.AppendAllText может дать немного более легкий интерфейс, не беспокоясь об открытии и закрытии потока. Хотя вам может понадобиться, чтобы потом беспокоиться о том, чтобы вставить свои собственные линии.:)

Ответ 8

На самом деле только Джон ответил (5 сентября 11 в 9:37) с помощью BaseStream.Seek работал для моего дела. Спасибо, Джон! Мне нужно было добавить строки в 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");
        }
    }
}

Ответ 9

Еще один простой способ - использовать 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");
}

Ответ 10

Заменить эту строку:

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

с помощью этого кода:

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

а затем введите строку в текстовый файл следующим образом:

sw.WriteLine("text content");