Пример работы с потоками в С++
Пусть в файле хранятся сведения о мониторах. В каждой строке указан тип, оптовая и розничная цены и примечание. Для простоты данные в каждой строке записаны единообразно: первые 20 символов занимает тип монитора, далее по 5 символов целые числа, представляющие оптовую и розничную цены, затем примечание длиной не более 40 символов.
Программа построчно считывает данные из текстового файла в буферную переменную s, затем формирует из них структуру mon и записывает ее в двоичном режиме в выходной файл. Далее иллюстрируется считывание из этого файла произвольной записи.
Программа построчно считывает данные из текстового файла в буферную переменную s, затем формирует из них структуру mon и записывает ее в двоичном режиме в выходной файл. Далее иллюстрируется считывание из этого файла произвольной записи.
#include#inclucle #include #include int main(){ FILE *fi. *fo: if((fi = fopen("d:\\c\\file.txt". "r")) == 0){ cout « "Ошибка открытия входного файла"; return 1;} 1f((fo = fopen("d:\\c\\binfile.out". "w+b")) == 0){ cout « "Ошибка открытия выходного файла"; return 1;} const int dl = 80; char s[dl]; struct{ char type[20]; int opt. rozn; char comm[40]; }mon; int kol = 0; // Количество записей в файле while (fgets(s, dl, 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 " « mon.type « " opt " « mon.opt « " rozn " « mon.rozn « endl; fclose(fo); return 0; }