Добавил:
ПОИТ 2016-2020 Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Скачиваний:
40
Добавлен:
29.04.2018
Размер:
824.83 Кб
Скачать

Int fseek(file *fp, long pos, int mode);

Возвращает 0 при успешном позиционировании и -1 (EOF) - в случае неудачи.

Параметр mode определяет, относительно чего отсчитывается текущая позиция в файле и имеет следующие значения (установленные в stdio.h):

#define SEEK_SET 0 // Относительно начала файла

// начало файла - позиция 0

#define SEEK_CUR 1 // Относит. текущей позиции,

// >0 - вперед, <0 - назад

#define SEEK_END 2 // Относительно конца файла

// (знач. pos – отрицательное)

Получить текущую длину файла можно позиционированием:

long fsize;

fseek(f1, 0L, SEEK_END); //устан. на конец файла

fsize = ftell(fd); //прочитать знач. текущей позиции

Еще одна функция позиционирования в файле на начало потока: rewind (fp);

Функция эквивалентна функции fseek за исключением того, что сбрасывается индикатор конца файла и индикатора ошибок. После функции rewind м. выполнять операции обновления файлов.

Пример. Имеется файл a.txt с текстом, содержащий информацию на нескольких страницах (на каждой странице не более 20 строк, в строке 80 символов). Разработать программу чтения страниц по введенному номеру страницы (нумерация с 0, не более 5 страниц).

VS 2012 и >

#include <stdio.h>

Void main()

{ FILE *fd;

Int np, n, I; long p[5]; char str[80];

fopen_s(&fd, "a.txt", "r"); //VS 2012 и >

for (np = 0; np < 5; np++)

{ P[np] = ftell(fd); //Запом. начало стр.

for (i = 0; i < 20; i++) // Чтение 20 строк

if (fgets(str, 80, fd) == NULL)

break; //Конец файла - выход

if (i < 20) break; //Неполная стр.- выход

}

while(1)

{ printf("Input number page ");

scanf_s("%d", &n);

if ((n > np) || (n < 0)) break;

fseek(fd, P[n], SEEK_SET);

for (i = 0; i < 20; i++)

{ if (fgets(str, 80, fd)==NULL) break;

puts(str);

}

} fclose(fd);

}

Пример. Определить размер файла a.txt в байтах.

#include <stdio.h>

Void main()

{ FILE *fd;

long int pos;

fopen_s(&fd, "a.txt", "r");

fseek (fd, 0, SEEK_END); //0 байт от конца

pos = ftell (fd); //Текущая позиция в файле

if (pos < 0) puts ("\nError");

else if (!pos) puts ("\nFile is empty");

else printf ("\nSize= %ld", pos);

}

#include <stdio.h>

Int main() {

FILE *in, *out;

int n;

fopen_s(&in, "c:/temp/input.txt", "r");

fscanf_s(in, "%d", &n);

fclose(in);

printf_s("%d\n", n);

fopen_s(&out, "c:/temp/output.txt", "w");

fprintf_s(out, "%d\n", n);

fclose(out);

getchar();

return 0;

}

Пример. Открыть существующий файл как двоичный для чтения и записи

FILE *fd;

fd = fopen("B.dat", "rb+wb");

fd = fopen("B.dat", "wb+");

Соседние файлы в папке Лекции