Объектная природа языка C# налагает некоторые ограничения на такую простую операцию как запись и чтение данных из файлов, в частности текстовых. Эти операции производятся с помощью «потоков», которые содержат в себе методы с данными и скрывают от пользователя тонкости работы с дисковой системой.
В приведенном примере для хранения строк в памяти используется класс StringBuilder .
#region Запись в файл
StreamWriter sw; // объект потока для записи
StringBuilder builder; // построитель строк
builder = new StringBuilder();
// добавляем текст
builder.Append("В комнате четыре угла.");
// перевод строки после добавления текста
builder.AppendLine("В каждом углу сидит кошка.");
// форматированный текст
builder.AppendFormat("Напротив каждой кошки по три ({0}) кошки. На хвосте каждой кошки по одной ({1}) кошке.", 3, 1);
builder.AppendLine();
builder.AppendLine("Сколько же всего кошек в комнате?");
builder.AppendFormat("Сегодня: {0:F}.", DateTime.Now);
// создаем поток для записи — file.txt с добавлением в конец файла, кодировка UTF8
using (sw = new StreamWriter(@"file.txt", true, Encoding.UTF8)) {
sw.WriteLine("Начинаем запись"); // запись строки
sw.Write(builder.ToString()); // запись сформированного списка строк
// сбрасываем буфера и даем доступ к файлу
sw.Close();
}
#endregion
#region Чтение из файла
StreamReader sr; // объект потока для чтения
StringBuilder builder;
builder = new StringBuilder();
using (sr = new StreamReader(@"file.txt")) {
String line;
// читаем строки до конца файла
while ( (line = sr.ReadLine() ) != null) {
builder.AppendLine(line);
}
sr.Close(); } // выводим содержимое в диалоговое окно MessageBox.Show(builder.ToString());
#endregion

Как сохранить или прочитать текст из файла?
