Как записать строку в файл c

от admin

Запись в файл с C#

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

1. Использование File Class

Класс File предоставляет несколько статических служебных методов для записи текста в файл. Ниже приведены примеры каждого из этих методов:

⮚ File.WriteAllText() метод

⮚ File.WriteAllLines() метод

⮚ File.WriteAllBytes() метод

Обратите внимание, что вышеупомянутые методы перезаписывают существующий файл. Чтобы добавить текст в файл, используйте любой из AppendAllLines , AppendAllText , или же AppendText() методы.

2. Использование StreamWriter Class

StreamWriter class предоставляет несколько методов для записи в файл. Мы можем использовать его Write() метод записи строки в поток.

В следующем примере показано, как использовать StreamWriter объект для записи данных в новый файл. Dispose() метод вызывается автоматически для сброса и закрытия потока, поскольку средство записи потока объявляется и создается в операторе using.

C#. Текстовые файлы. Решение задач на модификацию текстовых файлов. Классы File, StreamReader, StreamWriter

В данной теме приведены примеры решения наиболее распространенных задач, которые возникают при обработке текстовых файлов на языке C#. Примеры приведены для приложений, созданных по шаблону Console Application. Решение каждой задачи представлено соответствующей статической функцией. По желанию можно модифицировать продемонстрированные статические функции в функции экземпляра класса.

Для обработки текстовых файлов продемонстрирована работа классов File , StreamReader , StreamWriter .

Содержание

  • 1. Как определить, что данные в текстовом файле закончились?
  • 2. Последовательность действий при чтении данных из файла. Использование класса StreamReader
  • 3. Функция PrintFile() . Вывести содержимое текстового файла на экран. Способ 1
  • 4. Функция PrintFile2() . Вывести содержимое текстового файла на экран. Способ 2
  • 5. Функция ReplaceStringInFile() . Замена строки в текстовом файле. Использование возможностей класса File
  • 6. Функция RemoveStringFromFile() . Удаление строки из файла по индексу. Пример
  • 7. Функция InsertLineInFile() . Вставка строки в файл в заданной позиции
  • 8. Функция ConvertLinesFileToList() . Конвертировать строки файла в список List<string>
  • 9. Функция AddArrayLinesInFile() . Добавление массива строк в конец файла
  • 10. Функция SwapLinesInFile() . Обмен местами двух строк в файле
  • 11. Функция ReverseStringsInFile() . Реверсирование строк файла (перестановка строк файла в обратном порядке)
  • 12. Функция SortLineInFileBubble() . Сортировка строк в файле методом пузырька

Поиск на других ресурсах:

1. Как определить, что данные в текстовом файле закончились?

Чтение данных из текстового файла осуществляется с помощью метода ReadLine() . Метод читает строку символов из текущего потока и возвращает его в виде типа string . Признаком окончания строки есть символ ‘\n’ в файловом потоке. Если достигнут конец файла, метод ReadLine() возвращает значение null . Соответствующая проверка в программе позволяет определить, прочитано ли все данные из текстового файла.

2. Последовательность действий при чтении данных из файла. Использование класса StreamReader

Чтобы прочитать данные из текстового файла нужно выполнить приблизительно следующую последовательность действий:

1. Подключить модуль System.IO с помощью строки

2. Создать экземпляр класса StreamReader с помощью одного из перегруженных конструкторов. Одновременно с созданием экземпляра происходит открытие файла для чтения или записи. Класс StreamReader имеет несколько конструкторов.

В нижеследующем примере открывается текстовый файл с именем «TextFile1.txt» . Файл открывается для чтения (по умолчанию).

3. С помощью экземпляра StreamReader осуществить циклическое чтение строк файла как показано ниже

4. Закрыть файл с помощью метода Close()

3. Функция PrintFile() . Вывести содержимое текстового файла на экран. Способ 1

Для наглядной демонстрации чтения информации из текстового файла приводится статическая функция PrintFile() , которая выводит содержимое текстового файла на экран. Для чтения строк из файла функция использует метод ReadLine() класса StreamReader . Если достигнут конец файла, то ReadLine() возвращает null .

4. Функция PrintFile2() . Вывести содержимое текстового файла на экран. Способ 2

Ниже приведен пример статической функции PrintFile2() , которая использует метод ReadToEnd() класса StreamReader для чтения строк из файла. В отличие от ReadLine() , метод ReadToEnd() читает все строки из файла и записывает их в строку типа string включительно с символами ‘\n’ , ‘\r’ .

Алгоритм работы следующий:

  • сначала читаются все строки из файла в одну строку типа string ;
  • для полученной строки вызывется функция Split() , которая разбивает строку на массив строк. Признаком разбиения строки есть символ ‘\n’ ;
  • вывести массив строк на экран.
5. Функция ReplaceStringInFile() . Замена строки в текстовом файле. Использование возможностей класса File

При операциях с файлами важно придерживаться правильной последовательности чтения/записи. Если попробовать изменять данные в файле непосредственно, то можно допустить много трудноуловимых ошибок. Поэтому, для замены строки в текстовом файле рекомендуется использовать следующий алгоритм:

  • прочесть все строки из файла в массив. В примере для чтения строк из файла используется метод ReadAllLines() статического класса File . Этот метод возвращает массив типа string[] ;
  • осуществить замену строки в массиве;
  • записать строки из массива снова в файл. Для записи используется метод WriteAllLines() статического класса File . В метод передается имя файла и массив строк типа string[] , который нужно записать.

Текст демонстрационного консольного приложения следующий.

6. Функция RemoveStringFromFile() . Удаление строки из файла по индексу. Пример

При манипуляциях с файлами, которые изменяют общее количество строк в файле (вставка, удаление), лучшее представлять прочитанную информацию в виде списков типа List<string> . Это связано с тем, что в списки удобнее вставлять (удалять) элементы в конкретные позиции. Список не требует выделения дополнительных (часто больших) массивов информации в отличие от массива.
В данном примере продемонстрировано использование функции ReadLine() класса StreamReader . При чтении строки из файла эта функция удаляет символы ‘\r’ , ‘n’ , которые требуют дополнительной обработки.

7. Функция InsertLineInFile() . Вставка строки в файл в заданной позиции

По образцу пункта 6 можно реализовать вставку строки в файл в заданной позиции. Строки в файле предварительно копируются в список типа List<string> . Использование списков в подобных задачах облегчает работу программиста, поскольку списки содержат все необходимые методы вставки, добавления, удаления элемента.

Предложенная функция InsertLineInFile() имеет одну особенность. Если позиция вставки (нумеруется с 0) равна количеству элементов в файле n , то строка вставки добавляется в конец файла. Таким образом функция реализует вставку и добавление строки в файл.

8. Функция ConvertLinesFileToList() . Конвертировать строки файла в список List<string>

В пунктах 6, 7 повторяется код, который образовывает список типа List<string> из строк файла. Поэтому, целесообразно написать функцию ConvertLinesFileToList() , которая реализует конвертирование строк файла в список. Текст функции следующий.

Читать:
Что такое полиморфизм в java
9. Функция AddArrayLinesInFile() . Добавление массива строк в конец файла

В примере приведена функция, которая добавляет массив строк в конец файла. Данная функция использует функцию ConvertLinesFileToList() , которая возвращает строки файла в виде списка и описывается в пункте 8. Для работы с файлами используются возможности классов StreamReader и StreamWriter .

Алгоритм метода следующий:

  • прочитать данные из файла в список типа List<string> ;
  • добавить к списку массив строк;
  • записать измененный список в файл. Для записи списка используются средства класса StreamWriter .

Программный код функции AddArrayLinesInFile() следующий.

Использование функции в другом программном коде может быть, например, таким.

10. Функция SwapLinesInFile() . Обмен местами двух строк в файле

Обмен местами двух строк в файле не изменяет общее количество строк. Поэтому, прочитанные строки из файла целесообразно представить массивом типа string[] .

В C# в статическом классе File есть полезная функция ReadAllLines() , которая возвращает строки файла в виде массива string[] . Как и в случае с функцией ReadLine() класса StreamReader , каждая строка в функции ReadAllLines() не содержит символов ‘\n’ и ‘\r’ .

Статический файл File также содержит функцию WriteAllLines() , которая записывает строки типа string[] в файл.

Ниже приведен фрагмент кода, который содержит описание функции SwapLinesInFile() .

Использование функции SwapLinesInFile() в другом коде может быть, например, таким

Как записать строку string в файл?

Программа удаляет предыдущие вхождения последней буквы в словах. Я считываю строку из файла, это мне сделать удалось, но записать результат в другой файл у меня не выходит. Нужно, чтобы результат шел в файл, а не на консоль. Нужно как-то заменить std::cout?? Заранее спасибо за любую помощь.

Просто f << lastch; не работает, вообще ничего в файл не записывает

У половины комментирующих работает нормально, у половины работает только с f.close() , хотя файлы якобы должны закрываться автоматически при выходе из программы.

Вопрос старый, но раз уж его подняли на главную страницу, напишу ответ. Может кому-то пригодится.

std::ofstream обычно делает запись в файл НЕ сразу после вызова << .

Вместо этого, чтобы запись происходила быстрее, он использует буферизацию — накапливает в памяти (в так называемом буфере) поступающие символы, и время от времени (по умолчанию — когда встречает символ \n ) разом записывает их на диск (после чего буфер очищается и процесс повторяется).

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

Когда объект std::ofstream уничтожается, файл закрывается автоматически (в вашем случае это происходит при выходе из main .

Проблема здесь в том, что если программа встает на _getch() (или чем-то похожем) и ее закрывают на крестик, она обычно завершается немедленно. При таком ненормальном завершении работы файлы не закрываются должным образом (потому что деструкторы для объектов не вызываются) и содержимое их буферов не записывается на диск и теряется.

Если нажать любую клавишу (или Ввод , в случае std::cin.get() ) и дать программе завершиться нормально, проблем не будет.

(Видимо отсюда разногласия в комментариях. Часть людей нажимала Ввод , часть — крестик.)

Как записать строку в файл c

Для работы непосредственно с текстовыми файлами в пространстве System.IO определены специальные классы: StreamReader и StreamWriter .

Запись в файл и StreamWriter

Для записи в текстовый файл используется класс StreamWriter . Некоторые из его конструкторов, которые могут применяться для создания объекта StreamWriter:

StreamWriter(string path) : через параметр path передается путь к файлу, который будет связан с потоком

StreamWriter(string path, bool append) : параметр append указывает, надо ли добавлять в конец файла данные или же перезаписывать файл. Если равно true, то новые данные добавляются в конец файла. Если равно false, то файл перезаписываетсяя заново

StreamWriter(string path, bool append, System.Text.Encoding encoding) : параметр encoding указывает на кодировку, которая будет применяться при записи

Свою функциональность StreamWriter реализует через следующие методы:

int Close() : закрывает записываемый файл и освобождает все ресурсы

void Flush() : записывает в файл оставшиеся в буфере данные и очищает буфер.

Task FlushAsync() : асинхронная версия метода Flush

void Write(string value) : записывает в файл данные простейших типов, как int, double, char, string и т.д. Соответственно имеет ряд перегруженных версий для записи данных элементарных типов, например, Write(char value) , Write(int value) , Write(double value) и т.д.

Task WriteAsync(string value) : асинхронная версия метода Write. Обратите внимание, что асинхронные версии есть не для всех перегрузок метода Write.

void WriteLine(string value) : также записывает данные, только после записи добавляет в файл символ окончания строки

Task WriteLineAsync(string value) : асинхронная версия метода WriteLine

Рассмотрим запись в файл на примере:

В данном случае два раза создаем объект StreamWriter. В первом случае если файл существует, то он будет перезаписан. Если не существует, он будет создан. И в нее будет записан текст из переменной text. Во втором случае файл открывается для дозаписи, и будут записаны атомарные данные — строка и число.

По завершении в папке программы мы сможем найти файл note.txt, который будет иметь следующие строки:

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

Чтение из файла и StreamReader

Класс StreamReader позволяет нам легко считывать весь текст или отдельные строки из текстового файла.

Некоторые из конструкторов класса StreamReader:

StreamReader(string path) : через параметр path передается путь к считываемому файлу

StreamReader(string path, System.Text.Encoding encoding) : параметр encoding задает кодировку для чтения файла

Среди методов StreamReader можно выделить следующие:

void Close() : закрывает считываемый файл и освобождает все ресурсы

int Peek() : возвращает следующий доступный символ, если символов больше нет, то возвращает -1

int Read() : считывает и возвращает следующий символ в численном представлении. Имеет перегруженную версию: Read(char[] array, int index, int count) , где array — массив, куда считываются символы, index — индекс в массиве array, начиная с которого записываются считываемые символы, и count — максимальное количество считываемых символов

Похожие статьи