Конспект лекций Часть II одесса, 2003
fclose (указатель_файла) Для работы с файлами используются следующие функции: fprintf
Download 0.65 Mb. Pdf ko'rish
|
atki188 c konspekt 2
fclose (указатель_файла)
Для работы с файлами используются следующие функции: fprintf - форматированный вывод в файл, связанный с потоком. При этом файл должен быть открыт как текстовый, в режиме, допускающем за- пись. Синтаксис: int fprintf (FILE *Поток, Формат, СписокПеременных); fscanf – форматированное чтение значений переменных из файла, связанного с потоком. Файл должен быть открыт как текстовый в режиме, допускающем чтение. Синтаксис: int fscanf (FILE *Поток, const char* Формат, СписокАдр); Одесский колледж компьютерных технологий “СЕРВЕР” 21 fgets – читает из потока символы и записывает их в строку. Чтение заканчивается, если прочитан символ с номером КолСимволов-1 или если очередной символ является символом новой строки. Прочитанный из файла символ новой строки заменяется нулевым символом. Синтаксис: char* fgets (char * Строка, int КолСимволов, FILE *Поток); fputs – записывает в поток строку символов. Символ конца строки, нуль-символ, в поток не записывается. Синтаксис: char* fputs (char * Строка, FILE *Поток); feof – возвращает нулевое значение, если в результате выполнения последней операции чтения из потока достигнут конец файла. Синтаксис: int feof (FILE *Поток); Все эти функции описаны в заголовочном файле Как было сказано ранее, файл может быть открыт в текстовом или двоичном (бинарном) режиме. В отличие от текстового файла, в бинарном можно хранить структуры в их нормальном виде. Преимущество бинарных файлов состоит в том, что при чтении/записи не тратится время на преобра- зование данных из символьной формы представления во внутреннюю и об- ратно, при этом не происходит потери точности вещественных чисел. Кроме того, при работе с бинарными файлами применяется прямой доступ к инфор- мации путём установки текущей позиции указателя. Это даёт возможность быстрого получения и изменения отдельных данных файла. Чтение/запись в бинарный файл выполняется с помощью функций библиотеки fread и fwrite: size_t fwrite(const void *p, size_t size, size_t n, FILE *f); Функция fwrite записывает n элементов длиной size байт из буфера, заданно- го указателем p, в поток а. Возвращает число записанных аргументов. size_t fread(void *p, size_t size, size_t n, FILE *f); Функция fread считывает n элементов длиной size байт в буфер, заданный указателем p, из потока f. Возвращает число считанных элементов, которое может быть меньше, чем запрошенное. Пример работы с файлами: Допустим, что в файле хранятся сведения о мониторах. В каждой строке указан тип, оптовая и розничная цены и примечание. Для простоты данные в каждой строке записаны единообразно: первые 20 символов зани- мает тип монитора, далее по 5 символов целые числа, представляющие опто- вую и розничную цены, затем примечание длиной не более 40 символов. Приведенная ниже программа построчно считывает данные из тек- стового файла в буферную переменную s, затем формирует из них структуру mon и записывает её в двоичном режиме в выходной файл. Далее иллюстри- руется считывание из этого файла произвольной записи. #include #include Одесский колледж компьютерных технологий “СЕРВЕР” 22 #include #include int main(){ FILE *fi, *fo; if ((fi = fopen (“d:\\c\\file.txt”, “r”)) == 0){ cout << “Ошибка открытия входного файла”; return 1;} if ((fo = fopen (“d:\\c\\binfile.txt”, “w+b”)) == 0){ cout << “Ошибка открытия входного файла”; return 1;} const int d1 = 80; char s[d1]; struct{ char type[20]; int opt, rozn; char comm [40]; } mon; int kol = 0; //Количество записей в файле while(fgets(s, d1, fi)){ //Преобразование строки в структуру: strncpy(mon.type, s,19); mon.type[19] = ‘\0’; mon.opt = atoi(&s[20]); mon.rozn = atoi(&s[25]); strncpy (mon.comm, &s[30], 40); fwrite (&mon, sizeof mon, 1, fo); kol++; } fclose(fi); int i; cin >> i; //Номер записи if (i >= kol){cout <<”Запись не существует”; return 1;} //Установка указателя текущей позиции файла на запись i: fseek(fo, (sizeof mon)*i, SEEK_SET); fread(&mon, sizeof mon, 1,fo); cout<<“mon.type “< return 0; } В С++ библиотека операции, применимые к стандартному вводу/выводу, могут быть применены к файлам. Чтобы использовать файл для ввода или вывода, необходимо включить в программу заголовочный файл Одесский колледж компьютерных технологий “СЕРВЕР” 23 Использование файлов в программе предполагает следующие опера- ции: • создание потока; • открытие потока и связывание его с файлом; • обмен (ввод/вывод); • уничтожение потока; • закрытие файла. Перед тем, как открыть файл для вывода, необходимо объявить объ- ект типа ofstream: ofstream outfile (“ name-of-file”); Проверить, удалось ли нам открыть файл можно следующим образом: if (! outfile ) //false, если файл не открыт cerr << “Ошибка открытия файла.\n” Так же открывается файл и для ввода, только он имеет тип ifstream: ifstream infile (“ name-of-file”); if (! infile) //false, если файл не открыт cerr << “Ошибка открытия файла.\n” Полный формат команд открытия файла имеет вид: ifstream (const char *name, int mode – ios::in); //:: - доступ к ios ofstream(const char *name, int mode – ios::out | ios::trunc); Вторым параметром является режим открытия файла: in = 0x01 //Открыть для чтения out = 0x02 //Открыть для записи ate = 0x04 //Установить указатель на конец файла app = 0x08 //Открыть для добавления в конец trunk = 0x10 //Если файл существует, удалить nocreate = 0x20 //Если файл не существует, выдать ошибку noreplace =0x40 //Если файл существует, выдать ошибку binary = 0x80 //Открыть в двоичном режиме Download 0.65 Mb. Do'stlaringiz bilan baham: |
Ma'lumotlar bazasi mualliflik huquqi bilan himoyalangan ©fayllar.org 2024
ma'muriyatiga murojaat qiling
ma'muriyatiga murojaat qiling