C документ грамотности
Предыдущей главе мы объяснили стандартные устройства ввода и вывода обработки языка C. В этой главе мы введем C программиста, как создавать, открывать, закрывать текст или двоичные файлы.
Файл, будь то текст или двоичные данные, являются репрезентативными для серии байтов. Функция языка C не только обеспечивает доступ к верхнему уровню, но и обеспечивает базовую (ОС) вызывается для обработки файлов, хранящихся на устройстве. В этой главе будет объяснить важность вызова диспетчер файлов.
Открыть файл
Вы можете использовать функциюFOPEN () , чтобы создать новый документ или открыть существующий файл, то вызов будет инициализировать объект типа файла,типфайласодержит всю информацию , необходимую для управления потоком. Вот прототип этого вызова:
FILE *fopen( const char * filename, const char * mode );
Здесь, имя файла является строка используется для именования значение Режимдоступа файла может быть одним из следующих значений:
模式 | 描述 |
---|---|
r | 打开一个已有的文本文件,允许读取文件。 |
w | 打开一个文本文件,允许写入文件。如果文件不存在,则会创建一个新文件。在这里,您的程序会从文件的开头写入内容。 |
a | 打开一个文本文件,以追加模式写入文件。如果文件不存在,则会创建一个新文件。在这里,您的程序会在已有的文件内容中追加内容。 |
r+ | 打开一个文本文件,允许读写文件。 |
w+ | 打开一个文本文件,允许读写文件。如果文件已存在,则文件会被截断为零长度,如果文件不存在,则会创建一个新文件。 |
a+ | 打开一个文本文件,允许读写文件。如果文件不存在,则会创建一个新文件。读取会从文件的开头开始,写入则只能是追加模式。 |
Если процесс является двоичным файлом, вам необходимо использовать следующий режим доступа режим доступа для замены выше:
"rb", "wb", "ab", "rb+", "r+b", "wb+", "w+b", "ab+", "a+b"
Закройте файл
;Чтобы закрыть файл, используйте функцию fclose (). Прототип функции выглядит следующим образом:
int fclose( FILE *fp );
В случае успеха, закройтефайл, функция fclose () возвращает ноль, ошибка возникает при закрытии файла, функция возвращает EOF.Эта функция на самом деле, будет очистить данные в буфере, закройте файл, и освобождает всю память для файла. EOF является константа , определенная в заголовочном файлеstdio.h в.
Стандартная библиотека C предоставляет множество функций нажать символ или в виде фиксированной длины строки для чтения и записи файлов.
Запись в файл
Вот символы записи в потоке самой простой функции:
int fputc( int c, FILE *fp );
Функцияfputc () записывает символ с к значению параметра Fp указывает на выходной поток.Если запись прошла успешно, она возвращает записанный символ, если происходит ошибка, то она возвращаетEOF.Вы можете использовать следующие функции в строку с завершающим нулем, чтобы записать в поток:
int fputs( const char *s, FILE *fp );
Функцияfputs () записывает строку сдо точки Fp в выходной поток. Если запись прошла успешно, она возвращает неотрицательное значение , если происходит ошибка, то она возвращаетEOF.Вы можете также использоватьINT fprintf (FILE * Ф.П., Const символ * формат, ...) функцию , чтобы написать строку записать в файл.Попробуйте следующие примеры:
Примечание: Убедитесь , что вы имеете в наличии каталог / TMP,если этот каталог не существует, вам необходимо создать каталог на вашем компьютере.
#include <stdio.h> main() { FILE *fp; fp = fopen("/tmp/test.txt", "w+"); fprintf(fp, "This is testing for fprintf...\n"); fputs("This is testing for fputs...\n", fp); fclose(fp); }
Когда приведенный выше код компилируется и выполняется, то он будет создан в каталоге / TMP, новый файлtest.txt, и использовать две различные функции написаны две строки.Давайте читать файл.
Прочитайте файл
Вот самая простая функция для чтения одного символа из файла:
int fgetc( FILE * fp );
fgetc () функция читает символ из входного файла , на который указывает FP.Возвращаемое значение является символом для чтения, если произошла ошибка возвращаетсяEOF.Следующая функция позволяет считывать строку из потока:
char *fgets( char *buf, int n, FILE *fp );
Функцияfgets () считывает п из входного потока , на который указывает FP - один символ.Он будет читать строку скопированный в буферBUF, и , наконец , добавляет нулевойсимвол прекратить строку.
Если функция перед чтением последнего символа встречается символ новой строки '\ п' в конце файла или EOF, только чтобы вернуться, чтобы читать символы, в том числе новой строки. Вы можете также использоватьINT fscanf (FILE * Ф.П., Const символ * формат, ...) функции для чтения строки из файла, но в лице первого символа пробела, он перестанет читать.
#include <stdio.h> main() { FILE *fp; char buff[255]; fp = fopen("/tmp/test.txt", "r"); fscanf(fp, "%s", buff); printf("1 : %s\n", buff ); fgets(buff, 255, (FILE*)fp); printf("2: %s\n", buff ); fgets(buff, 255, (FILE*)fp); printf("3: %s\n", buff ); fclose(fp); }
Когда приведенный выше код компилируется и выполняется, он будет читать файлы, созданные на части, дает следующие результаты:
1 : This 2: is testing for fprintf... 3: This is testing for fputs...
Во-первых, метод fscanf () только для чтения Это,потому что он встречает пространство в задней части . Далее, не называютfgets () , чтобы прочитать остальное, до конца строки.И, наконец, вызовfgets () читать в полном объеме во второй строке.
Бинарные функции ввода / вывода
Следующие две функции для дискретных входов и выходов:
size_t fread(void *ptr, size_t size_of_elements, size_t number_of_elements, FILE *a_file); size_t fwrite(const void *ptr, size_t size_of_elements, size_t number_of_elements, FILE *a_file);
Эти две функции используются для чтения и записи блок памяти - как правило, массив или структуру.