Каков самый простой способ записать содержимое StringBuilder в текстовый файл в .NET 1.1?

Мне приходится использовать StringBuilder вместо списка строк, потому что я застрял в .NET 1.1 для этого проекта.

Я хочу написать серию отладочных сообщений, которые я записал в файл, чтобы изучить их на досуге, так как на экране слишком много всего, что можно увидеть (в MessageBox нет полос прокрутки). Некоторые из простых способов записи файла, по-видимому, недоступны в .NET 1.1. У меня также нет доступа к Environment.Newline для четкого разделения строк, которые я добавляю (AppendLine также недоступен в этой архаичной версии StringBuilder).

Как проще всего в .NET 1.1 (С#) записать содержимое StringBuilder в файл? На портативном устройстве нет диска «C», поэтому я думаю, что мне придется записать его в «\hereIAm.txt» или что-то в этом роде.


person B. Clay Shannon    schedule 15.03.2013    source источник


Ответы (5)


У вас все еще есть доступ к StreamWriter:

using (System.IO.StreamWriter file = new System.IO.StreamWriter(@"\hereIam.txt"))
{
    file.WriteLine(sb.ToString()); // "sb" is the StringBuilder
}

Из документации MSDN: Запись в текст Файл (Visual C#).

Для более новых версий .NET Framework (начиная с версии 2.0) это можно сделать с помощью одной строки с помощью File.WriteAllText.

System.IO.File.WriteAllText(@"C:\TextFile.txt", stringBuilder.ToString());
person Darren    schedule 15.03.2013
comment
Файл StreamWriter = новый StreamWriter(@\hereIAm.txt); файл.WriteLine(SB.ToString()); // SB — это StringBuilder - person B. Clay Shannon; 16.03.2013
comment
Мне нужно было использовать using, чтобы убедиться, что весь вывод сброшен. Я отредактировал ответ и добавил использование. - person R. Schreurs; 07.11.2019
comment
Судя по примеру в ссылке MSDN, WriteAllText не нуждается в using @R.Schreurs. Я думаю, вам это не нужно для WriteAllText, верно? - person barlop; 15.05.2020

Я знаю, что это старый пост и что ему нужен ответ для .NET 1.1, но на него уже есть очень хороший ответ. Я подумал, что было бы хорошо получить ответ для тех людей, которые попадут на этот пост, у которых может быть более поздняя версия .Net framework, таких как я, когда я искал ответ на тот же вопрос.

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

System.IO.File.WriteAllText(@"C:\MyDir\MyNewTextFile.txt",sbMyStringBuilder.ToString());
person dscarr    schedule 27.06.2014
comment
Начиная с .net 2.0 и далее - person James Westgate; 23.03.2018

Нет необходимости в StringBuilder:

string path = @"c:\hereIAm.txt";
if (!File.Exists(path)) 
{
    // Create a file to write to.
    using (StreamWriter sw = File.CreateText(path)) 
    {
        sw.WriteLine("Here");
        sw.WriteLine("I");
        sw.WriteLine("am.");
    }    
} 

Но, конечно, вы можете использовать StringBuilder, чтобы создать все строки и сразу записать их в файл.

sw.Write(stringBuilder.ToString());

StreamWriter.Write Method (String) (. NET Framework 1.1)

Запись текста в файл (.NET Платформа 1.1)

person Tim Schmelter    schedule 15.03.2013

StreamWriter доступен для сети 1.1. и для Compact framework. Просто откройте файл и примените ToString к вашему StringBuilder:

    StringBuilder sb = new StringBuilder();
    sb.Append(......);

    StreamWriter sw = new StreamWriter("\\hereIAm.txt", true);
    sw.Write(sb.ToString());
    sw.Close();

Также обратите внимание, что вы говорите, что хотите добавить отладочные сообщения в файл (например, в журнал). В этом случае правильным конструктором для StreamWriter является тот, который принимает логический флаг append. Если true, то он пытается добавить существующий файл или создать новый, если он не существует.

person Steve    schedule 15.03.2013

Если вам нужно писать построчно из построителя строк

StringBuilder sb = new StringBuilder();
sb.AppendLine("New Line!");

using (var sw = new StreamWriter(@"C:\MyDir\MyNewTextFile.txt", true))
{
   sw.Write(sb.ToString());
}

Если вам нужно написать весь текст в виде одной строки из построителя строк

StringBuilder sb = new StringBuilder();
sb.Append("New Text line!");

using (var sw = new StreamWriter(@"C:\MyDir\MyNewTextFile.txt", true))
{
   sw.Write(sb.ToString());
}
person Ahmad Alaa    schedule 06.01.2019