Как записать строку в файл c
Обновлено: 21.11.2024
Всякий раз, когда вы хотите работать с файлом, первым делом нужно создать файл. Файл — это не что иное, как пространство в памяти, где хранятся данные.
Для создания файла в программе на языке C используется следующий синтаксис,
В приведенном выше синтаксисе файл представляет собой структуру данных, определенную в стандартной библиотеке.
fopen — это стандартная функция, которая используется для открытия файла.
- Если файл отсутствует в системе, он создается, а затем открывается.
- Если файл уже присутствует в системе, он напрямую открывается с помощью этой функции.
fp — это указатель файла, указывающий на тип файла.
Каждый раз, когда вы открываете или создаете файл, вы должны указать, что вы собираетесь делать с файлом. Файл в программировании на языке C может быть создан или открыт для чтения/записи. Режим используется, чтобы указать, хотите ли вы открыть файл для какой-либо из указанных ниже целей. Ниже приведены различные типы режимов программирования на языке C, которые можно использовать при работе с файлом.
Режим файла | Описание |
---|---|
r | Открыть файл для чтения. Если файл находится в режиме чтения, то никакие данные не удаляются, если файл уже присутствует в системе. |
w | Открыть файл для записи . Если файл находится в режиме записи, то создается новый файл, если файл вообще не существует. Если файл уже присутствует в системе, то все данные внутри файла усекаются, и он открывается для записи. |
a | Откройте файл в режиме добавления. Если файл находится в режиме добавления, то файл открывается. Содержимое файла не меняется. |
r+ | открыть для чтения и записи с начала |
w+ | открыть для чтения и записи, перезаписать файл |
a+ | открыть для чтения и записи, дополнить файл |
В данном синтаксисе имя файла и режим указываются как строки, поэтому они всегда должны быть заключены в двойные кавычки.
Файл создается в той же папке, в которой вы сохранили свой код.
Вы можете указать путь, по которому вы хотите создать файл
Как закрыть файл
Всегда следует закрывать файл после завершения операций над файлом. Это означает, что содержимое и ссылки на файл удалены. Это предотвращает случайное повреждение файла.
«C» предоставляет функцию fclose для выполнения операции закрытия файла. Синтаксис fclose следующий:
Функция fclose принимает в качестве аргумента указатель файла. Затем файл, связанный с указателем файла, закрывается с помощью функции fclose. Возвращает 0, если закрытие прошло успешно, и EOF (конец файла), если при закрытии файла произошла ошибка.
После закрытия файла тот же указатель файла можно использовать и с другими файлами.
В программировании на языке C файлы автоматически закрываются при завершении программы. Закрытие файла вручную путем написания функции fclose является хорошей практикой программирования.
Запись в файл
В C при записи в файл символы новой строки "\n" должны добавляться явно.
Библиотека stdio предлагает необходимые функции для записи в файл:
- fputc(char, file_pointer): записывает символ в файл, на который указывает file_pointer.
- fputs(str, file_pointer): записывает строку в файл, на который указывает file_pointer.
- fprintf(file_pointer, str, variable_lists): печатает строку в файл, на который указывает file_pointer. Строка может дополнительно включать спецификаторы формата и список переменных variable_lists.
Приведенная ниже программа показывает, как выполнить запись в файл:
Функция fputc():
Приведенная выше программа записывает один символ в файл fputc_test.txt, пока не дойдет до символа следующей строки «\n», который указывает на то, что предложение было успешно записано. Процесс заключается в том, чтобы взять каждый символ массива и записать его в файл.
- В приведенной выше программе мы создали и открыли файл с именем fputc_test.txt в режиме записи и объявили нашу строку, которая будет записана в файл.
- Мы выполняем посимвольную операцию записи, используя цикл for, и помещаем каждый символ в наш файл до тех пор, пока не встретится символ «\n», после чего файл закрывается с помощью функции fclose.
fputs() Функция:
- В приведенной выше программе мы создали и открыли файл с именем fputs_test.txt в режиме записи.
- После того, как мы выполним операцию записи с помощью функции fputs(), записав три разные строки
- Затем файл закрывается с помощью функции fclose.
Функция fprintf():
- В приведенной выше программе мы создали и открыли файл с именем fprintf_test.txt в режиме записи.
- После выполнения операции записи с помощью функции fprintf() путем записи строки файл закрывается с помощью функции fclose.
Чтение данных из файла
Есть три разные функции, предназначенные для чтения данных из файла
- fgetc(file_pointer): возвращает следующий символ из файла, на который указывает указатель файла. Когда конец файла достигнут, EOF отправляется обратно.
- fgets(buffer, n, file_pointer): считывает n-1 символов из файла и сохраняет строку в буфере, к которому в качестве последнего добавляется символ NULL «\0».
- fscanf(указатель_файла, спецификаторы_переменных, адреса_переменных): используется для разбора и анализа данных. Он считывает символы из файла и присваивает ввод списку указателей переменных variable_addresses, используя спецификаторы преобразования. Имейте в виду, что, как и в случае с scanf, fscanf прекращает чтение строки при обнаружении пробела или новой строки.
Следующая программа демонстрирует чтение из файла fputs_test.txt с использованием функций fgets(),fscanf() и fgetc() соответственно:
Результат:
- В приведенной выше программе мы открыли файл с именем «fprintf_test.txt», который был ранее написан с использованием функции fprintf() и содержит строку «Изучение C с Guru99». Мы читаем его с помощью функции fgets(), которая считывает строку за строкой, при этом размер буфера должен быть достаточным для обработки всей строки.
- Мы снова открываем файл, чтобы сбросить файл указателя на начало файла. Создайте различные строковые переменные для обработки каждого слова отдельно. Распечатайте переменные, чтобы увидеть их содержимое. Функция fscanf() в основном используется для извлечения и анализа данных из файла.
- Повторно откройте файл, чтобы сбросить файл указателя на начало файла. Считайте данные и распечатайте их из файла символ за символом, используя функцию getc(), пока не встретится оператор EOF
- После выполнения операции чтения файла с использованием разных вариантов мы снова закрыли файл с помощью функции fclose.
Интерактивное чтение и запись файлов с помощью getc и putc
Это самые простые операции с файлами. Getc означает получение символа, а putc означает ввод символа. Эти две функции используются для обработки только одного символа за раз.
Следующая программа демонстрирует функции обработки файлов в программировании на языке C:
В последней главе объяснялись стандартные устройства ввода и вывода, поддерживаемые языком программирования C. В этой главе рассказывается, как программисты C могут создавать, открывать, закрывать текстовые или двоичные файлы для хранения своих данных.
Файл представляет собой последовательность байтов, независимо от того, является ли он текстовым или двоичным файлом. Язык программирования C обеспечивает доступ к функциям высокого уровня, а также к низкоуровневым (на уровне ОС) вызовам для обработки файлов на ваших устройствах хранения. В этой главе вы познакомитесь с важными функциями управления файлами.
Открытие файлов
Вы можете использовать функцию fopen() для создания нового файла или для открытия существующего файла. Этот вызов инициализирует объект типа FILE, который содержит всю информацию, необходимую для управления потоком. Прототип вызова этой функции выглядит следующим образом:
Здесь имя файла — это строковый литерал, который вы будете использовать для именования файла, а режим доступа может иметь одно из следующих значений —
Открывает существующий текстовый файл для чтения.
Открывает текстовый файл для записи. Если его нет, то создается новый файл. Здесь ваша программа начнет записывать содержимое с начала файла.
Открывает текстовый файл для записи в режиме добавления. Если его нет, то создается новый файл. Здесь ваша программа начнет добавлять содержимое в существующее содержимое файла.
Открывает текстовый файл как для чтения, так и для записи.
Открывает текстовый файл как для чтения, так и для записи. Сначала он усекает файл до нулевой длины, если он существует, иначе создает файл, если он не существует.
Открывает текстовый файл как для чтения, так и для записи. Он создает файл, если он не существует. Чтение начнется с начала, но запись может быть только добавлена.
Если вы собираетесь работать с бинарными файлами, вы будете использовать следующие режимы доступа вместо упомянутых выше —
Закрытие файла
Чтобы закрыть файл, используйте функцию fclose(). Прототип этой функции —
Функция fclose(-) возвращает ноль в случае успеха или EOF, если при закрытии файла возникла ошибка. Эта функция фактически сбрасывает все данные, все еще ожидающие в буфере, в файл, закрывает файл и освобождает всю память, используемую для файла. EOF — это константа, определенная в заголовочном файле stdio.h.
Стандартная библиотека C предоставляет различные функции для чтения и записи файла, посимвольно или в виде строки фиксированной длины.
Запись файла
Ниже приведена простейшая функция для записи отдельных символов в поток —
Функция fputc() записывает символьное значение аргумента c в выходной поток, на который ссылается fp. Он возвращает письменный символ, записанный в случае успеха, иначе EOF, если есть ошибка. Вы можете использовать следующие функции для записи строки с завершающим нулем в поток —
Функция fputs() записывает строку s в выходной поток, на который ссылается fp. В случае успеха он возвращает неотрицательное значение, в противном случае в случае какой-либо ошибки возвращается EOF. Вы также можете использовать функцию int fprintf(FILE *fp,const char *format, . ) для записи строки в файл. Попробуйте следующий пример.
Убедитесь, что у вас есть каталог /tmp. Если это не так, то прежде чем продолжить, вы должны создать этот каталог на своем компьютере.
Когда приведенный выше код скомпилирован и выполнен, он создает новый файл test.txt в каталоге /tmp и записывает две строки, используя две разные функции. Давайте прочитаем этот файл в следующем разделе.
Чтение файла
Ниже приведена простейшая функция для чтения одного символа из файла —
Функция fgetc() считывает символ из входного файла, на который ссылается fp. Возвращаемое значение — это прочитанный символ, или в случае какой-либо ошибки он возвращает EOF. Следующая функция позволяет прочитать строку из потока —
Функция fgets() считывает до n-1 символов из входного потока, на который ссылается fp. Он копирует прочитанную строку в буфер buf, добавляя нулевой символ для завершения строки.
Если эта функция встречает символ новой строки '\n' или конец файла EOF до того, как будет прочитано максимальное количество символов, она возвращает только символы, прочитанные до этой точки, включая символ новой строки. Вы также можете использовать функцию int fscanf(FILE *fp, const char *format, . ) для чтения строк из файла, но она останавливает чтение после обнаружения первого символа пробела.
Когда приведенный выше код компилируется и выполняется, он считывает файл, созданный в предыдущем разделе, и выдает следующий результат —
Давайте немного подробнее рассмотрим, что здесь произошло. Во-первых, fscanf() читала только это, потому что после этого она столкнулась с пробелом, второй вызов для fgets(), который читает оставшуюся строку, пока не встретит конец строки. Наконец, последний вызов fgets() полностью считывает вторую строку.
Двоичные функции ввода/вывода
Есть две функции, которые можно использовать для двоичного ввода и вывода —
Обе эти функции следует использовать для чтения или записи блоков памяти — обычно это массивы или структуры.
В этой статье есть несколько примеров, демонстрирующих различные способы записи текста в файл. В первых двух примерах используются статические удобные методы класса System.IO.File для записи каждого элемента любого IEnumerable и строки в текстовый файл. В третьем примере показано, как добавить текст в файл, когда вам нужно обрабатывать каждую строку отдельно при записи в файл. В первых трех примерах вы перезаписываете все существующее содержимое в файле. В последнем примере показано, как добавить текст в существующий файл.
Записать набор строк в файл
Предыдущий пример исходного кода:
Создает массив строк с тремя значениями.
- Асинхронно создает файл с именем WriteLines.txt. Если файл уже существует, он перезаписывается.
- Записывает заданные строки в файл.
- Закрывает файл, автоматически очищая и удаляя его по мере необходимости.
Записать одну строку в файл
Предыдущий пример исходного кода:
Создает экземпляр строки с заданным строковым литералом.
- Асинхронно создает файл с именем WriteText.txt. Если файл уже существует, он перезаписывается.
- Записывает заданный текст в файл.
- Закрывает файл, автоматически очищая и удаляя его по мере необходимости.
Записать выбранные строки из массива в файл
Предыдущий пример исходного кода:
- Создает массив строк с тремя значениями.
- Создает экземпляр StreamWriter с путем к файлу WriteLines2.txt в качестве объявления использования.
- Перебирает все строки.
- Условно ожидает вызова StreamWriter.WriteLineAsync(String), который записывает строку в файл, если строка не содержит "Second" .
Добавить текст к существующему файлу
Предыдущий пример исходного кода:
- Создает массив строк с тремя значениями.
- Создает экземпляр StreamWriter с путем к файлу WriteLines2.txt в качестве объявления использования, передавая значение true для добавления.
- Ожидает вызова StreamWriter.WriteLineAsync(String), который записывает строку в файл в виде добавленной строки.
Исключения
Следующие условия могут вызвать исключение:
-
: файл существует и доступен только для чтения. : имя пути может быть слишком длинным. : Диск может быть заполнен.
Есть дополнительные условия, которые могут вызывать исключения при работе с файловой системой, лучше программировать с защитой.
В этом руководстве мы узнаем, как выполнять операции ввода-вывода (I/O) над файлом с помощью языка программирования C.
Файловый ввод-вывод C – Содержание
Прежде чем мы подробно обсудим каждую операцию, давайте возьмем простую программу на C:
Простая программа на C для открытия, чтения и закрытия файла
В приведенной выше программе мы открываем файл newfile.txt в режиме r, считываем содержимое файла и отображаем его на консоли. давайте подробно разберем каждую операцию:
1. Открытие файла
Функция fopen() используется для открытия файла.
Синтаксис:
pointer_name может быть любым по вашему выбору.
имя_файла — это имя файла, который вы хотите открыть. Укажите здесь полный путь, например «C:\\myfiles\\newfile.txt».
При открытии файла необходимо указать режим. Режим, который мы используем для чтения файла, — «r», то есть «режим только для чтения».
например:
Адрес первого символа хранится в указателе fp .
Как проверить, успешно ли открылся файл?
Если файл не открывается успешно, то указателю будет присвоено значение NULL, поэтому вы можете написать логику следующим образом:
Этот код проверит, успешно ли открылся файл или нет. Если файл не открывается, пользователю будет показано сообщение об ошибке.
Различные режимы открытия файлов:
Файл открывается с помощью функции fopen(), при открытии вы можете использовать любой из следующих режимов в соответствии с требованиями.
Режим «r»: это режим только для чтения, что означает, что если файл открыт в режиме r, он не позволит вам записывать и изменять его содержимое. Когда fopen() успешно открывает файл, она возвращает адрес первого символа файла, иначе возвращает NULL.
Режим «w»: это режим только для записи. Функция fopen() создает новый файл, когда указанный файл не существует, и если ей не удается открыть файл, она возвращает NULL.
Режим «a»: в этом режиме содержимое может быть добавлено в конец существующего файла. Подобно режиму «w», fopen() создает новый файл, если он не существует. При неудачном открытии возвращает NULL.
Указатель файла указывает на: последний символ файла.
Режим «r+»: этот режим аналогичен режиму «r»; однако вы можете выполнять различные операции с файлом, открытым в этом режиме. Вам разрешено читать, записывать и изменять содержимое файла, открытого в режиме «r+».
Указатель файла указывает на: Первый символ файла.
Режим «w+»: такой же, как режим «w», за исключением операций, которые можно выполнять; файл можно читать, записывать и изменять в этом режиме.
Режим «а+»: такой же, как режим «а»; вы можете читать и добавлять данные в файл, однако изменение содержимого в этом режиме запрещено.
2. Чтение файла
Чтобы прочитать файл, мы должны сначала открыть его в любом из режимов, например, если вы хотите только прочитать файл, откройте его в режиме «r». В зависимости от режима, выбранного при открытии файла, нам разрешено выполнять определенные операции с файлом.
Программа на C для чтения файла
fgetc(): эта функция считывает символ с текущей позиции указателя и при успешном чтении перемещает указатель на следующий символ в файле. Как только указатели достигают конца файла, эта функция возвращает EOF (конец файла). Мы использовали EOF в нашей программе для определения конца файла.
3. Запись в файл
Чтобы записать файл, мы должны открыть файл в режиме, поддерживающем запись. Например, если вы откроете файл в режиме «r», вы не сможете записать файл, так как «r» — это режим только для чтения, который разрешает только чтение.
Пример: программа на C для записи файла
Эта программа просит пользователя ввести символ и записывает этот символ в конец файла. Если файл не существует, то эта программа создаст файл с указанным именем и запишет в него введенный символ.
4. Закрытие файла
Функция fclose() используется для закрытия открытого файла. В качестве аргумента вы должны предоставить указатель на файл, который вы хотите закрыть.
Пример, показывающий операции открытия, чтения, записи и закрытия в C
Как читать/записывать (I/O) строки в файлах — fgets и fputs
Здесь мы обсудим, как читать и записывать строки в файл.
s: массив символов для хранения строк.
rec_len: Длина входной записи.
fpr: Указатель на входной файл.
Давайте рассмотрим пример:
Пример чтения строк из файла в программировании на C
В приведенном выше примере мы использовали функцию fgets следующим образом:
Здесь str представляет собой строку (массив символов), в которой вы сохраняете строку после ее чтения из файла.
10 – это длина строки, которую необходимо читать каждый раз.
fpr — указатель на файл, который будет прочитан.
Почему я использовал if(fgets(str, 10, fpr)==NULL в качестве логики для определения конца файла?
В приведенных выше примерах мы использовали ch==EOF, чтобы узнать конец файла. Здесь мы использовали эту логику, потому что fgets возвращает NULL, когда больше нет записей, доступных для чтения.
Программа на C — запись строки в файл
char *s — массив символов.
FILE *fpw — Указатель (типа FILE) на файл, который будет записан.
fputs принимает два аргумента —
str — строка представляет собой массив, в котором хранится строка.
fpw — указатель FILE на выходной файл, в который необходимо записать запись.
Обратите внимание на fputs:
fputs по умолчанию не добавляет новую строку после записи каждой записи, чтобы сделать это вручную — вы можете использовать следующий оператор после каждой записи в файл.
C FILE I/O для двоичных файлов
До сих пор мы изучали файловые операции с текстовыми файлами, что делать, если файлы являются двоичными (например, файл .exe). Вышеупомянутые программы не будут работать с двоичными файлами, однако есть небольшое изменение в обработке двоичных файлов. Основное отличие заключается в имени файла и режимах. Давайте поймем это с помощью примера. Допустим, у меня есть два бинарных файла bin1.exe и bin2.exe — я хочу скопировать содержимое bin1.exe в bin2.exe:
Пример: чтение и запись двоичных файлов в C
Примечание. Режимы открытия файлов — «rb» и «wb» вместо «r» и «w».
Когда выходные данные программы или некоторые переменные должны быть сохранены в месте хранения в файловой системе, данные должны быть записаны в файл. В этом уроке мы узнаем, как записывать данные в файл, используя некоторые встроенные функции языка программирования C.
- fprintf()
- фпутс()
- фпутк()
- fwrite()
fprintf()
Функция fprintf() используется для записи форматированного вывода в поток. Она используется для записи набора символов в файл.
Синтаксис
Синтаксис функции fprintf()
поток? Это указатель на объект FILE, который идентифицирует поток.
формат ? Это строка C, содержащая текст, который будет записан в поток. Опционально он может содержать теги формата, которые заменяются значениями, указанными в последующих дополнительных аргументах. Прототип флага формата: %[flags][width][.precision][length]specifier. р>
Пример
Программа C
Вывод
фпуты()
fputs() используется для записи строки в файл.
Синтаксис
Синтаксис функции fputs()
Функция fputs() записывает строку, на которую указывает str, в поток, на который указывает stream. При успешном завершении возвращает 0, иначе EOF.
Пример
Программа C
фпутк()
fputc() используется для записи символа в поток.
Синтаксис
Синтаксис функции fputc():
Функция fgetc() запишет байт, указанный параметром c, в выходной поток, на который указывает поток .При успешном завершении функция fputc() вернет записанное значение, иначе будет символ EOF. возвращено.
Пример
Программа C
Вывод
fwrite()
Функция fwrite() используется для записи данных (могут содержать несколько символов и несколько строк) в файл.
Синтаксис
- Функция fwrite() будет записывать объекты объектов, указанных в size, из массива, на который указывает ptr, в поток, на который указывает поток.
- При успешном завершении функция fwrite() возвращает количество успешно записанных объектов, в противном случае будет установлен EOF.
Пример
В следующем примере мы запишем переменную в файл.
Программа C
Пример
В этом примере мы запишем массив в файл. Приведенный ниже фрагмент кода записывает целочисленный массив в файл.
Пример
В этом примере мы запишем структуру в файл. Чтобы записать структуру C в файл, используйте функцию fwrite().
Программа C
Пример
В этом примере мы запишем массив символов в файл.
Программа C
Вывод
Заключение
В этом учебнике по C мы узнали, как записывать переменные, массив символов или поток данных в файл, используя различные функции, доступные в программировании на C, с примерами.
Читайте также: