КАТЕГОРИИ: Архитектура-(3434)Астрономия-(809)Биология-(7483)Биотехнологии-(1457)Военное дело-(14632)Высокие технологии-(1363)География-(913)Геология-(1438)Государство-(451)Демография-(1065)Дом-(47672)Журналистика и СМИ-(912)Изобретательство-(14524)Иностранные языки-(4268)Информатика-(17799)Искусство-(1338)История-(13644)Компьютеры-(11121)Косметика-(55)Кулинария-(373)Культура-(8427)Лингвистика-(374)Литература-(1642)Маркетинг-(23702)Математика-(16968)Машиностроение-(1700)Медицина-(12668)Менеджмент-(24684)Механика-(15423)Науковедение-(506)Образование-(11852)Охрана труда-(3308)Педагогика-(5571)Полиграфия-(1312)Политика-(7869)Право-(5454)Приборостроение-(1369)Программирование-(2801)Производство-(97182)Промышленность-(8706)Психология-(18388)Религия-(3217)Связь-(10668)Сельское хозяйство-(299)Социология-(6455)Спорт-(42831)Строительство-(4793)Торговля-(5050)Транспорт-(2929)Туризм-(1568)Физика-(3942)Философия-(17015)Финансы-(26596)Химия-(22929)Экология-(12095)Экономика-(9961)Электроника-(8441)Электротехника-(4623)Энергетика-(12629)Юриспруденция-(1492)Ядерная техника-(1748) |
Функции для модификации содержимого файла
Функция int putc (int символ, FILE * указатель_на _файл); записывает один символ в текущую позицию указанного открытого файла. Хотя символ и определяется как int, однако записывается только младший байт (соответствующий char). Если функция выполнилась успешно, то возвращается записанный символ, иначе – EOF. Функция int getc (FILE * указатель_на _файл); читает один символ из текущей позиции указанного открытого файла. После чтения указатель сдвигается на одну позицию вперед. Если достигнут конец файла, то функция возвращает значение EOF. Пример: Открыть файл и записывать туда вводимые с клавиатуры символы, до тех пор, пока не будет введен символ ‘!’. Прочитать полученный файл. #include <iostream.h> #include <stdio.h> #include <stdlib.h> FILE *fl; void flr(); void flw(); int main() { flr(); // Запись в файл flw(); // Чтение из файла return 0; } void flr() { if ((fl = fopen("lab2.dat","w"))==NULL) { cout << "Oshibka pri sozdanii"<<endl; exit(1); } char ch; do { cin >> ch; putc(ch, fl); } while (ch!= '!'); fclose(fl); } void flw() { if ((fl = fopen("lab2.dat","r"))==NULL) { cout << "Oshibka pri otritii"<<endl; exit(1); } char ch= getc(fl); while (ch!= EOF) { cout << ch << " "; ch=getc(fl); } fclose(fl); }
Функция int feof (FILE * указатель_на _файл); возвращает отличное от нуля значение (true) если достигнут конец файла, и ноль (false), если конец файла не достигнут. Функция может работать с любыми типами файлов. Функция flw в предыдущем примере может выглядеть так: void flw() { if ((fl = fopen("lab2.dat","r"))==NULL) { cout << "Oshibka pri otritii"<<endl; exit(1); } while(!feof(fl)) cout << getc(fl) << " "; fclose(fl); }
Функция int fputs (const char * строка, FILE * указатель_на _файл); записывает строку символов в текущую позицию указанного открытого файла. В случае ошибки эта функция возвращает EOF. Нулевой символ в файл не записывается. Функция char * fgets (char * строка, int длина, FILE * указатель_на _файл); читает строку символов из текущей позиции указанного открытого файла до тех пор, пока не будет прочитан символ перехода на новую строку, или количество прочитанных символов не станет равным длина -1. Если был прочитан разделитель строк, он записывается в строку. Полученная в результате строка будет оканчиваться символом конца строки ('\0'). В случае ошибки функция возвращает NULL Пример: Открыть файл и записывать туда все введенные с клавиатуры строки, до тех пор, пока не будет введена пустая строка. Прочитать полученный файл. #include <iostream.h> #include <stdio.h> #include <stdlib.h> #include <string.h> FILE *fl; void fsr(); void fsw(); int main() { fsr(); // Запись в файл fsw(); // Чтение из файла return 0; } void fsr() { if ((fl = fopen("lab2.dat","w"))==NULL) { cout << "Oshibka pri sozdanii"<<endl; exit(1); } cout << "Vvedite sytoki" << endl; char str[80]; do { gets(str); strcat(str, "\n"); // добавление разделителя строк fputs(str, fl); } while(*str!='\n'); fclose(fl); } void fsw() { if ((fl = fopen("lab2.dat","r"))==NULL) { cout << "Oshibka pri otritii"<<endl; exit(1); } char str[80]; while(!feof(fl)) { if(fgets(str, 100, fl)!= NULL) cout << str; } fclose(fl); }
Кроме основных функций ввода/вывода, также часто используются функции fprintf() и fscanf(). Функция int * fprintf (FILE * указатель_на _файл, const char * управляющая_строка); записывает форматированные данные в файл. Управляющая_строка определяет строку форматирования аргументов, заданных своими адресами. Обычно эта строка состоит из последовательности символов “%”, после которых следует символ типа данных:
Функция int * fscanf (FILE * указатель_на _файл, const char * управляющая_строка); читает форматированные данные из файла. Строка форматирования строится аналогично функции fprintf. Следует обратить внимание на то, что при чтении данных всегда указываются адреса переменных (&), а не сами переменные. Пример Запись и чтение данных из файла. #include <iostream.h> #include <stdio.h> #include <stdlib.h> #include <string.h> FILE *fl; double v; char st[81]; int n; char ch; void fpr(); void fpw(); int main() { fpr(); // Запись в файл fpw(); // Чтение из файла return 0; } void fpr() { if ((fl = fopen("lab2.dat","w"))==NULL) { cout << "Oshibka pri sozdanii"<<endl; exit(1); } v=3.14; n=298; fprintf(fl,"%s %e %d %c", "string",v,n,'x'); fclose(fl); } void fpw() { if ((fl = fopen("lab2.dat","r"))==NULL) { cout << "Oshibka pri otritii"<<endl; exit(1); } fscanf(fl,"%s %e %d %c",st,&v,&n,&ch); cout << st << endl; cout << v << endl; cout << n << endl; cout << ch << endl; fclose(fl); }
Функция void rewind (FILE * указатель_на _файл); устанавливает указатель текущей позиции выделенного файла в начало файла.
Функция int ferror (FILE * указатель_на _файл); определяет, произошла ли ошибка во время работы с файлом. Она возвращает ненулевое значение (true), если при последней операции с файлом произошла ошибка; в противном же случае она возвращает 0 (false). Функция size_t fwrite (const void * записываемое_данное, size_t размер_элемента, size_t число_элементов, FILE *указатель_на _файл); записывает в файл заданное число данных заданного размера. Размер данных задается в байтах. Тип size_t определяется как целое без знака. Функция возвращает число записанных элементов. Если число записанных элементов не равно заданному, то возникла ошибка. Функция size_t fread (void * считываемое_данное, size_t размер_элемента, size_t число_элементов, FILE *указатель_на _файл); считывает в указанное данное заданное число данных заданного размера. Размер данных задается в байтах. Функция возвращает число прочитанных элементов. Если число записанных элементов не равно заданному, то возникла ошибка. Функции fread() и fwrite() при открытии файла для работы с двоичными данными могут работать с информацией любого типа. Функция int fileno (FILE * указатель_на _файл); возвращает значение дескриптора указанного файла (дескриптор – логический номер файла для заданного потока). Функция long filelength (int дескриптор); возвращает длину файла с соответствующим дескриптором в байтах. Функция int chsize (int дескриптор, long размер); устанавливает новый размер файла с соответствующим дескриптором. Если размер файла увеличивается, то в конец добавляются нулевые символы, если размер файла уменьшается, то все лишние данные удаляются. Функция long ftell (FILE * указатель_на _файл); возвращает значение указателя на текущую позицию файла. Функция int fgetpos (FILE *stream, fpos_t * позиция); определяет значение текущей позиции файла. Функция int fseek (FILE * указатель_на _файл, long int число_байт, int точка_отсчета); устанавливает указатель в заданную позицию. Заданное количество байт отсчитывается от начала отсчета, которое задается следующими макросами: начало файла – SEEK_SET, текущая позиция – SEEK_CUR, конец файла – SEEK_END. При успешном завершении работы функция возвращает нуль, а в случае ошибки — ненулевое значение. Пример: Открыть файл и записывать туда все вводимые с клавиатуры числа, до тех пор, пока не будет введено число -1. Отсортировать данные в файле по возрастанию. #include <iostream.h> #include <stdio.h> #include <stdlib.h> #include <io.h> FILE *fl; void fbr(); void fbsort(); void fbw();
int main() { fbr(); // Запись в файл fbsort(); // Сортировка в файле fbw(); // Чтение из файла return 0; }
void fbr() {
if ((fl = fopen("lab2.dat","wb"))==NULL) { cout << "Oshibka pri sozdanii"<<endl; exit(1); } int a; do { cin >> a; int nwrt = fwrite(&a, sizeof(int), 1, fl); } while (a!= -1);
fclose(fl); }
void fbsort() { if ((fl = fopen("lab2.dat","rb+"))==NULL) { cout << "Oshibka pri otritii"<<endl; exit(1); } int nb =sizeof(int), a, b, nwrt; int n=filelength(fileno(fl))/nb;
for (int i=0; i<n-1; i++) for (int j=i+1; j<n; j++) { fseek(fl,i*nb, SEEK_SET); nwrt = fread(&a, nb, 1, fl); fseek(fl,j*nb, SEEK_SET); nwrt = fread(&b, nb, 1, fl); if (a>b) { fseek(fl,i*nb, SEEK_SET); nwrt = fwrite(&b, nb, 1, fl); fseek(fl,j*nb, SEEK_SET); nwrt = fwrite(&a, nb, 1, fl); } } fclose(fl); }
void fbw() { if ((fl = fopen("lab2.dat","rb"))==NULL) { cout << "Oshibka pri otritii"<<endl; exit(1); }
int a; while(true) { int nwrt = fread(&a, sizeof(int), 1, fl); if (nwrt!=1) break; cout << a << " "; } fclose(fl); }
Дата добавления: 2014-01-07; Просмотров: 591; Нарушение авторских прав?; Мы поможем в написании вашей работы! Нам важно ваше мнение! Был ли полезен опубликованный материал? Да | Нет |