Операции с файлами 1. 2. 3. 4. 5. Открытие файла Закрытие файла Чтение из файла Запись в файл Позиционирование в файлах произвольного доступа 1
1. Открытие файла #include
1. Открытие файла "x+z" x – операция: r – для чтения, файл должен существовать; w – для записи в режиме пересоздания файла; a – для добавления в конец файла. Символ + – добавить противоположную операцию, например, "r+". 3
1. Открытие файла "x+z" z – тип файла: t – текстовый файл, b – двоичный файл. Текстовый файл: обработка комбинации кодов возврат каретки – перевод строки 4
2. Закрытие файла int fclose(FILE *stream); stream – указатель, полученный в результате вызова функции fopen. При успешном завершении функция fclose возвращает значение 0, в случае ошибки – значение EOF. 5
3. Чтение из файла int fgetc(FILE * stream) stream – указатель на файл Результат – код прочитанного символа или EOF при обнаружении конца файла int ungetc(int c, FILE *stream) stream – указатель на файл с – код последнего прочитанного из потока символа Возвращает символ c обратно в поток 6
3. Чтение из файла int fgets(char *string, int n, FILE *stream) stream – указатель на файл string – указатель на область памяти n – размер области памяти Читает символы из файла в область памяти, в том числе символ новой строки. Прочитанная строка завершается нуль байтом 7
3. Чтение из файла size_t fread( void *buffer, size_t size, size_t count, FILE *stream ) – stream – указатель на файл buffer – указатель на область памяти count – количество читаемых блоков size – размер одного блока в байтах Возвращает количество блоков данных, успешно прочитанных из файла 8
3. Чтение из файла int fscanf(FILE *stream, const char *format, &arg 1. . . ) stream – указатель на файл format – строка формата arg 1. . . – список аргументов Ввод с редактированием из файла Аналогична функции scanf 9
4. Запись в файл int fputc( int c, FILE *stream ) stream – указатель на файл c – код символа int fputs( const char *string, FILE *stream ) stream – указатель на файл string – указатель на строку символов Не добавляет в конец строки символ новой строки 10
4. Запись в файл size_t fwrite( const void *buffer, size_t size, size_t count, FILE *stream ) stream – указатель на файл buffer – указатель на область памяти count – количество записываемых блоков size – размер одного блока в байтах Возвращает количество блоков данных, успешно записанных в файл 11
4. Запись в файл int fprintf(FILE *stream, const char *format[, arg 1, . . . ]) stream – указатель на файл format – строка формата arg 1. . . – список аргументов Вывод с редактированием в файл Аналогична функции printf 12
5. Позиционирование в файле long ftell(FILE * stream) stream – указатель на файл Возвращает смещение для текущего положения указателя чтения-записи относительно начала файла ф Начало файла а смещение й л учз 13
5. Позиционирование в файле int fseek(FILE * stream, long offset, int origin) stream – указатель на файл offset – смещение нового положения указателя чтения-записи origin – позиция в файле, относительно которой задается смещение offset 14
5. Позиционирование в файле Значения origin: SEEK_SET – смещение отсчитывается от начала файла SEEK_CUR – смещение отсчитывается от текущего положения указателя чтениязаписи SEEK_END – смещение отсчитывается от конца файла 15
5. Позиционирование в файле int rewind(FILE *stream) stream – указатель на файл Устанавливает указатель чтения-записи на начало файла Эквивалентно fseek(fp, 0, SEEK_SET) 16
6. Пример программы Определить размер файла #include
6. Пример программы } if(fd == NULL){ fprintf(stderr, "can't open file %sn", fname); return 1; } fseek(fd, 0, SEEK_END); size = ftell(fd); printf("File %s has %ld bytesn", fname, size); return 0; 18
7. Результаты тестирования File files. c has 309 bytes Для продолжения нажмите любую клавишу. . . 19
8. Пример программы #include
8. Пример программы fd = fopen(fname, "w+b"); if(fd == NULL){ fprintf(stderr, "can't open file %sn", fname); return 1; } 21
8. Пример программы printf("size of data: %dn", sizeof(inbuf)); fwrite(inbuf, 1, sizeof(inbuf), fd); fseek(fd, 20, SEEK_CUR); fwrite(inbuf, 1, sizeof(inbuf), fd); fseek(fd, 0, SEEK_END); size = ftell(fd); printf("File %s has %ld bytesn", fname, size); 22
" src="https://present5.com/presentation/5594849_101470080/image-23.jpg" alt="8. Пример программы rewind(fd); printf("reading from filen"); while((size = fread(outbuf, 1, sizeof(outbuf), fd)) >" /> 8. Пример программы rewind(fd); printf("reading from filen"); while((size = fread(outbuf, 1, sizeof(outbuf), fd)) > 0) fwrite(outbuf, 1, size, stdout); printf("n"); return 0; } 23
9. Результаты тестирования size of data: 17 File files. dat has 54 bytes reading from file data for testing Для продолжения нажмите любую клавишу. . . 24