Fseek позиционировать файл


работа с fseek и файлами

задача:
совершить «прыжок» по строкам файла test.txt (строк, предположим, 20) и считав строку (предположим седьмую) вывести её на экран.

проблема:
как не странно, но не работает(
помогите чем сможете.

PS: Для чего нужны функции fgets и fputs и как с ними работать?

18.10.2009, 00:15

Работа с файлами (fseek)
В чем проблема и как ее устранить ? #include #include #include.

fseek не работает
Нужно записать данные в структурированный текстовый файл. Проблема заключается в том, что в части.

Fseek и структуры
Добрый день,не могу разобраться с fseek в структурах / Нужно сделать запрос (zapros()) n-ой записи.

Функция fseek
Здраствуйте! Пишу сейчас телефонную книгу. Точнее что-то наподобие этого. Появилась проблема. Мне.

fseek вылетает
#include #include char *filename; long size; File *in; char *infile;.

fseek() и произвольный доступ

Можно выполнять операции произвольного чтения и записи, используя систему буферизированного ввода/вывода, с помощью fseek(), устанавливающей текущую файловую позицию. Она имеет следующий прототип:

int fseek(FILE *fp long нисло_байт, int начало);

где fp — это указатель на файл, возвращенный fopen(), число_байт — это длинное целое, содер­жащее число байт от начала до позиции маркера, а начало — это одно из следующих макроопре­делений (определенных в stdio.h):

Макроопределения определены как целочисленные значения, причем SEEK_SET соответствует 0, SEEK_CUR — 1, a SEEK_END — 2. Следовательно, для перехода на число_байт от начала файла следует установить начало в SEEK_SET. Для перехода от текущей позиции надо использо­вать SEEK_CUR, а для перехода от конца файла — SEEK_END. Функция fsee() возвращает 0 в случае удачи или ненулевое значение в случае ошибки.
Например, можно использовать следующий код для чтения 234-го байта файла test:

int func1(void)
<
FILE *fp;
if((fp=fopen(«test», «rb»)) == NULL) <
printf(«Cannot open file.»);
exit(1);
>
fseek(fp, 234L, O);
return getc(fp); /* чтение одного символа в 234-й позиции */
>
>

Другим примером, использующим функцию fseek(), является следующая программа dump, по­зволяющая просмотреть содержимое, как в ASCII, так и в шестнадцатиричных форматах. Можно смотреть на файл 128-байтными «секторами», причем двигаться можно в произвольном направле­нии. Для выхода из программы следует набрать -1, когда будет предложено ввести номер сектора. Обратим внимание на использование fread() для чтения файла. Если остается прочитать меньше чем SIZE байт, то число, передаваемое в display(), как раз и определяет, сколько символов необхо­димо вывести. (Надо помнить, что fread() возвращает число прочитанных элементов.) Введем про­грамму в компьютер и основательно с ней разберемся:

/* dump: простая дисковая утилита для просмотра, использующая fseek. */
#include
#include
#define SIZE 128
void display(int numread);
char buf[SIZE];
void display();
int main(int argc, char *argv[])
<
FILE *fp;
int sector, numread;
if(argc!=2) <
printf(«Usage: dump filename»);
return 1;
>
if((fp=fopen(argv[1], «rb»))==NULL) <
printf(«Cannot open file.»);
return 1;
>
do <
printf(«Enter sector: «);
scanf(«%d», &sector);
if(sector >= 0) <
if(fseek(fp, sector*SIZE, SEEK_SET)) <
printf(«seek error»);
>
if((numread=fread(buf, 1, SIZE, fp)) != SIZE)
printf(«EOF reached.»);
display(numread);
>
> while(sector>=0);
return 0;
>

Функции позиционирования файла

int fseek (FILE *stream, long offset, int origin)

fseek устанавливает позицию для stream; последующее чтение или запись будет производиться с этой позиции. Новая текущая позиция устанавливается со смещением offset относительно положения, заданного значением origin. Если origin равно 0 то смещение производится относительно начала файла; если origin равно 1, то относительно прежней текущей позиции; и относительно конца файла, если origin равно 2. Значение offset должно быть равно нулю или значению, полученному при помощи функции ftell. Это единственный надежный способ получения величины offset для функции fseek.

long ftell (FILE *stream)

ftell возвращает текущее значение смещения в байтах относительно начала потока stream или -1L, в случае ошибки.

void rewind (FILE *stream)

rewind(fp) делает то же, что и fseek(fp,0L,SEEK_SET); clearerr(fp).

int fgetpos (FILE *stream, fpos_t *ptr)

fgetpos записывает текущую позицию потока stream в *ptr для последующего использования ее в fsetpos. Тип fpos_t позволяет хранить значения такого рода. В случае ошибки fgetpos возвращает ненулевое значение.

int fsetpos (FILE *stream, const fpos_t *ptr)

fsetpos устанавливает позицию в stream, читая ее из *ptr, куда она была ранее записана с помощью fgetpos. В случае ошибки fsetpos возвращает ненулевое значение.

int feof (FILE *stream)


feof возвращает ненулевое значение, если для потока stream установлен индикатор конца файла.

void clearerr (FILE *stream)

clearerr очищает индикаторы конца файла и ошибки потока stream.

Математические функции

В головном файле описываются следующие математические функции:

double sin(double x) синус x

double cos(double x) косинус x

double tan(double x) тангенс x

double asin(double x) арксинус x; xÎ[-1,+1]

double acos(double x) арккосинус x; xÎ[-1,+1]

double atan(double x) арктангенс x

double sinh(double x) гиперболический синус x

double cosh(double x) гиперболический косинус x

double tanh(double x) гиперболический тангенс x

double exp(double x) экспоненциальная функция e x

double log(double x) натуральный логарифм ln(x), x>0

double log10(double x) десятичный логарифм log10(x), x>0

double sqrt(double x) квадратный корень Öx, x³0

double fabs(double x) абсолютное значение |x|

double pow(double x, double y) x y

double ldexp(double x, int n) x*2 n

Функции общего назначения

Функции этого раздела предназначены для преобразования чисел и запроса памяти; они описаны в головном файле .

double atof(const char *s)

atof переводит строку s в значение double. В случае переполнения выдает HUGE_VAL — некоторое положительное double-значение, определенное в головном файле ; при исчезновении порядка — нуль.

int atoi(const char *s)

atoi переводит строку s в значение int. В случае переполнения выдает (int)HUGE_VAL — некоторое положительное double-значение, определенное в головном файле , преобразованное в int; при исчезновении порядка — нуль.

void *calloc(size_t nobj, size_t size)

calloc возвращает указатель на место в памяти, отведенное для массива nobj объектов, каждый из которых имеет размер size. Выделенная область памяти обнуляется. Если память отвести не удалось, то результат работы функции — NULL.

void *malloc(size_t size)


malloc возвращает указатель на место в памяти для объекта размера size. Выделенная память не инициализируется. Если память отвести не удалось, то результат работы функции — NULL.

void free(void *p)

free освобождает область памяти, на которую указывает p; если p равно NULL, то функция ничего не делает. Значение p должно указывать на область памяти, ранее выделенную с помощью функций calloc или malloc.

Дальние переходы

Головной файл предоставляет средства для изменения обычной последовательности обработки вызовов функций: «вызов – возврат в точку вызова». Типичная ситуация, когда требуется отказаться от этой стратегии – необходимость вернуться из «глубоко вложенного» вызова функции на верхний уровень, минуя промежуточные возвраты.

Илон Маск рекомендует:  Псевдокласс valid в CSS

int setjmp (jmp_buf env)

setjmp сохраняет контекст вызова в env для последующего его использования в longjmp. Возвращает нуль, если возврат осуществляется непосредственно из setjmp, и значение val (которое должно быть отличным от нуля), если возврат произошел из последующего вызова longjmp. Обращение к setjmp разумно только в определенных ситуациях: в основном, это проверки в if, swith и циклах в выражениях отношения вида

/* после прямого возврата из setjmp */

/* после возврата из longjmp */

void longjmp (jmp_buf env, int val)

longjmp восстанавливает контекст, сохраненный в env при последнем вызове setjmp. Счет возобновляется, как если бы функция setjmp только что отработала и вернула ненулевое значение val. При этом переменныеимеют те значения, которые они имели в момент обращения к longjmp; функция setjmp значений объектов не сохраняет. Результат непредсказуем, если в момент обращения к longjmp, функция, содержащая вызов setjmp, уже завершила свою работу стандартным образом, вернув управление в точку вызова.

Последнее изменение этой страницы: 2020-02-05; Нарушение авторского права страницы

Позиционирование указателя записи-чтения

С каждым файлом связан указатель записи-чтения (маркер), задающий место доступа к очередному байту файла. При выполнении последовательного доступа маркер позиционируется (смещается) автоматически при любой операции чтения или записи. Если после ввода информации в файл требуется её прочитать с самого начала, необходимо прежде всего использовать функцию вида

rewind (fp) , где fp – указатель на открытый файл.

Эта функция устанавливает маркер записи-чтения на начало файла. Файл можно обрабатывать в любом порядке, если передвинуть маркер в нужную позицию функцией вида

Int fseek (указатель_потока, (long) смещение, начало_отсчета),

которая сдвигает маркер записи-чтения файла, на который ссылается указатель_потока, на величину смещения от начала_отсчета. При этом если смещение > 0, то выполняется сдвиг к концу файла, а если смещение

Не нашли то, что искали? Воспользуйтесь поиском:

Лучшие изречения: Как то на паре, один преподаватель сказал, когда лекция заканчивалась — это был конец пары: «Что-то тут концом пахнет». 8377 — | 8008 — или читать все.

188.64.174.135 © studopedia.ru Не является автором материалов, которые размещены. Но предоставляет возможность бесплатного использования. Есть нарушение авторского права? Напишите нам | Обратная связь.

Отключите adBlock!
и обновите страницу (F5)

очень нужно

PHP: Функция fseek()

Покончив с основами чтения и записи текстовых файлов, давайте теперь уделим немного внимания работе с бинарными файлами. Работать с бинарными файлами намного труднее, чем с текстовыми, поскольку они по своей природе являются нечитабельными, и доступны для чтения только компьютеру.

В РНР запись бинарных файлов осуществляется так же, как и запись текстовых файлов (посредством функции fputs ()) и поэтому не требует дополнительных разъяснений. Фактически, единственным отличием (которое уже упоминалось) является использование режима b при открытии файла функцией fopen ().

Поэтому текущий раздел посвящен в основном функциям, связанным с чтением из файла бинарных данных и преобразованием их к виду, используемому в РНР. А именно, мы попробуем написать функцию, которая читает заголовок Zip-файла и определяет минимальный номер версии программы Zip, необходимой для распаковки этого файла. Для этого мы сначала ознакомимся с функциями fseek(),fread( ) и unpack().

При работе с бинарными файлами часто возникает необходимость перехода в различные позиции (или смещения) файла. Этим она отличается от работы с текстовыми файлами, которые, как правило, читаются и пишутся последовательно. В РНР установка указателя файла по определенному смещению внутри открытого файла осуществляется с помощью функции fseek (), которая имеет следующий синтаксис:

fseek($file ref, $offset [, $reference]) ;

где $file_ref — это поток, a $offset указывает число байт смещения от позиции, определяемой третьим параметром Sreference, который принимает значение одной из следующих трех констант.

Константы позиционирования для функции fseek()


SEEK_SET (По умолчанию) начало файла.
SEEK_CUR Текущая позиция файла.
SEEK END Байт, следующий за концом файла.

При использовании функции fseek() вполне допустимо устанавливать указатель файла за пределами файла. Хотя операция чтения из такой позиции завершится ошибкой, запись в эту позицию возможна и приведет к увеличению размера файла.

Функция fseek () возвращает нуль в случае успешного завершения и -1 в случае, если указатель файла не может быть установлен. Обратите внимание также на то, что отсчет смещений указателя в fseek() начинается с нуля и, следовательно, это необходимо учитывать при передаче параметра $of f set . Чтобы установить указатель файла в позицию $offset, функции fseek() необходимо передать параметр $offset — 1

fseek, _fseeki64 fseek, _fseeki64

Перемещает файловый указатель в указанное местоположение. Moves the file pointer to a specified location.

Синтаксис Syntax

Параметры Parameters

вышестоящий stream
Указатель на структуру FILE. Pointer to FILE structure.

offset offset
Количество байт, начиная с origin. Number of bytes from origin.

origin origin
Первоначальная позиция. Initial position.

Возвращаемое значение Return Value

В случае успеха fseek и _fseeki64 возвращают 0. If successful, fseek and _fseeki64 returns 0. В противном случае возвращается ненулевое значение. Otherwise, it returns a nonzero value. Для устройств, которые не поддерживают поиск, возвращаемое значение не определено. On devices incapable of seeking, the return value is undefined. Если Stream является пустым указателем или если источник не является одним из допустимых значений, описанных ниже, fseek и _fseeki64 вызывают обработчик недопустимого параметра, как описано в разделе Проверка параметров. If stream is a null pointer, or if origin is not one of allowed values described below, fseek and _fseeki64 invoke the invalid parameter handler, as described in Parameter Validation. Если выполнение может быть продолжено, эти функции устанавливают значение еинвал и возвращают-1. If execution is allowed to continue, these functions set errno to EINVAL and return -1.

Примечания Remarks

Функции fseek и _fseeki64 перемещают указатель файла (при его наличии), связанный с потоком , в новое расположение, которое принимает байты из источника. The fseek and _fseeki64 functions moves the file pointer (if any) associated with stream to a new location that is offset bytes from origin. Следующая операция в потоке происходит в новом местоположении. The next operation on the stream takes place at the new location. В потоке, открытом для обновления, следующая операция может быть либо операцией чтения, либо операцией записи. On a stream open for update, the next operation can be either a read or a write. Источник аргумента должен быть одной из следующих констант, определенных в stdio. Высоты The argument origin must be one of the following constants, defined in STDIO.H:

значение происхождения origin value Значение Meaning
SEEK_CUR SEEK_CUR Текущая позиция файлового указателя. Current position of file pointer.
SEEK_END SEEK_END Конец файла. End of file.
SEEK_SET SEEK_SET Начало файла. Beginning of file.

Можно использовать fseek и _fseeki64 для перемещения указателя в любое место в файле. You can use fseek and _fseeki64 to reposition the pointer anywhere in a file. Указатель также может быть размещен за пределами файла. The pointer can also be positioned beyond the end of the file. fseek и _fseeki64 очищают индикатор конца файла и отменяют результат всех предыдущих вызовов ungetc в потоке. fseek and _fseeki64 clears the end-of-file indicator and negates the effect of any prior ungetc calls against stream.

Когда файл открыт для добавления данных, текущая позиция в файле определяется последней операцией ввода-вывода, а не тем, где должна произойти следующая запись. When a file is opened for appending data, the current file position is determined by the last I/O operation, not by where the next write would occur. Если в открытом для добавления файле еще не было ни одной операции ввода-вывода, этой позицией является начало файла. If no I/O operation has yet occurred on a file opened for appending, the file position is the start of the file.

Для потоков, открытых в текстовом режиме, fseek и _fseeki64 имеют ограниченный объем использования, так как переводы перевода строки с возвратом каретки могут привести к созданию непредвиденных результатов для fseek и _fseeki64 . For streams opened in text mode, fseek and _fseeki64 have limited use, because carriage return-line feed translations can cause fseek and _fseeki64 to produce unexpected results. Единственные операции fseek и _fseeki64 , которые гарантированно работают с потоками, открытыми в текстовом режиме,: The only fseek and _fseeki64 operations guaranteed to work on streams opened in text mode are:

поиск со смещением 0 относительно любого из значений origin; Seeking with an offset of 0 relative to any of the origin values.

Поиск с начала файла со значением offset, возвращенным из вызова ftell при использовании fseek или _ftelli64 при использовании _fseeki64. Seeking from the beginning of the file with an offset value returned from a call to ftell when using fseek or _ftelli64 when using _fseeki64.

Кроме того, в текстовом режиме при вводе CTRL+Z интерпретируется как символ конца файла. Also in text mode, CTRL+Z is interpreted as an end-of-file character on input. В файлах, открытых для операций чтения и записи, fopen и все связанные подпрограммы проверяют CTRL + Z в конце файла и удаляют его, если это возможно. In files opened for reading/writing, fopen and all related routines check for a CTRL+Z at the end of the file and remove it if possible. Это делается потому, что использование сочетания fseek и ftell или _fseeki64 и _ftelli64для перемещения внутри файла, заканчивающегося клавишами CTRL + Z, может вызвать неправильное поведение fseek или _fseeki64 в конце File. This is done because using the combination of fseek and ftell or _fseeki64 and _ftelli64, to move within a file that ends with a CTRL+Z may cause fseek or _fseeki64 to behave improperly near the end of the file.

Когда CRT открывает файл, который начинается с метки порядка байтов (BOM), указатель файла помещается после метки (т. е. в начале фактического содержимого файла). When the CRT opens a file that begins with a Byte Order Mark (BOM), the file pointer is positioned after the BOM (that is, at the start of the file’s actual content). Если необходимо fseek в начало файла, используйте ftell , чтобы получить начальное расположение и fseek на него, а не в положении 0. If you have to fseek to the beginning of the file, use ftell to get the initial position and fseek to it rather than to position 0.

Эта функция блокирует работу других потоков во время выполнения, поэтому она потокобезопасна. This function locks out other threads during execution and is therefore thread-safe. Описание неблокирующей версии этой функции см. в разделе _fseek_nolock, _fseeki64_nolock. For a non-locking version, see _fseek_nolock, _fseeki64_nolock.

Требования Requirements

Функция Function Обязательный заголовок Required header
fseek fseek
_fseeki64 _fseeki64

Дополнительные сведения о совместимости см. в разделе Совместимость. For additional compatibility information, see Compatibility.

Использование функции си fseek

Чтение из файла осуществляется последовательно, то есть после выполнения очередной операции считывания указатель будет установлен на следующий непрочитанный символ. Изменить положение указателя можно при помощи функции fseek(). Она используется для перемещения указателя файла в определенную позицию. Функция fseek() задана в стандартной библиотеке языка Си — stdio.h, поэтому в начале программы, в которой функция будет использоваться, должна присутствовать декларация: #include .

Описание функции fseek в си


Int fseek(FILE *FilePointer, long offset, int pos) — в функцию передаются такие аргументы:

  • FILE *FilePointer — указатель на объект FILE. До использования функции необходимо открыть файл с помощью функции fopen().
  • Offset — через данный аргумент в функцию передается, на сколько байт должен быть смещен указатель. Имеет тип длинное целое (long int). Положительное значение параметра означает смещение вправо, а отрицательное влево.
  • Pos — определяет позицию, с которой добавляется смещение. Тип данного аргумента целое число (int).

Параметр pos определяет отправную точку, от которой будет отсчитываться смещение. Он может принимать три значения — 0, 1, 2, которые равносильны символьным константам SEEK_SET(0), SEEK_CUR(1) и SEEK_END(2):

  1. Значение параметра pos равно SEEK_SET — смещение будет определяться относительно начала файла.
  2. При значении равном SEEK_CUR смещение считается от текущей позиции курсора.
  3. Если он имеет значение SEEK_END, значит, смещение будет отсчитываться от конца файла.

Функция си fseek возвращает ноль в случае успешного перемещения указателя и любое ненулевое значение, если она не смогла выполнить требуемое действие, например, в случае выхода указателя за границы файла. Возвращаемое значение будет равно EBADF при передаче в функцию неверного указателя файла, EINVAL в случае недопустимого значения аргумента или ESPIPE при ошибке в параметре offset, например, выход за пределы файла.

5. Позиционирование файла

При считывании и записи файлов они условно представляются в виде линейно расположенных данных, наподобие записи на непрерывной магнитной ленте. Место, с которого идет считывание в данный момент (или позиция, начиная с которой идет запись), определяется специальным указателем. Файлы последовательного доступа просматриваются строго от начала до конца, а в файлах произвольного доступа указатель может быть размещен в любом месте, начиная с которого ведется запись или считывание данных файла.

Таким образом, указатель обеспечивает позиционирование файлов. Имеется ряд функций позиционирования:

eofstat = feof(fid) — проверяет, достигнут ли конец файла с идентификатором fid. Возвращает 1, если указатель установлен на конец файла, и 0 — в противном случае;

message = ferror(fid) — возвращает сведения об ошибке в виде строки message. Аргумент fid — идентификатор открытого файла (см. функцию fopen с ее подробным описанием);

message = f error (f id,’clear’) — очищает индикатор ошибки для заданного файла;

[message,errnum] = ferror(.) — возвращает номер ошибки errnum последней операции ввода-вывода для заданного файла.

Если последняя операция ввода-вывода, выполненная для определенного значением fid файла, была успешной, значение message — это пустая строка, a errnum принимает значение 0.

Значение errnum, отличное от нуля, говорит о том, что при последней операции ввода-вывода произошла ошибка. Параметр message содержит строку, содержащую информацию о характере возникшей ошибки.

Empty matrix: 4-by-0

Is the file open for reading? . . .

frewind(fid) — устанавливает указатель позиции в начало файла с идентификатором fid;

status — fseekCfid,offset,origin) — устанавливает указатель в файле с идентификатором fid в заданную позицию — на байт, указанный параметром offset относительно origin.

fid — идентификатор файла, возвращенный функцией fopen;

offset — значение, которое интерпретируется следующим образом:

offset>0 — изменяет позицию указателя на offset байт в направлении к концу файла;

offset=0 — не меняет позицию указателя;

s=sprintf(format,A. ) — форматирует данные в матрице А в формате, заданном параметром format, и создает из них строковую переменную s;

[s.errrmsg] = sprintfCformat,A. ) — аналогична ранее описанной функции, но дополнительно возвращает строку ошибки errmsg, если ошибка имела место, или пустую строку в противном случае. Строка format определяет систему счисления, выравнивание, значащие цифры, ширину поля и другие атрибуты выходного формата. Она может содержать обычные символы наряду со спецификаторами, знаками выравнивания и т. д. Функция fprintf ведет себя, как и аналогичная функция fprintf 0 языка ANSI С, с некоторыми исключениями и расширениями.

Функция sscanf аналогична функции fscanf за исключением того, что она считывает данные из символьной переменной системы MATLAB, а не из файла.


А = sscanf (s,format) — считывает данные из символьной переменной s, преобразует их согласно значению format и создает на основе этих данных матрицу А. Параметр format определяет формат данных, которые нужно считать;

А = sscanf(s,format,size) — считывает количество данных, определенное параметром size, и преобразует их согласно строке format. Параметр size представляет собой аргумент, определяющий количество данных для чтения. Допустимы следующие значения:

n — чтение п элементов в вектор-столбец;

inf — чтение элементов до конца символьной переменной и помещение их в вектор-столбец, содержащий такое же количество элементов, как и в строковой переменной;

[m.n] — считывает столько элементов, сколько требуется для заполнения матрицы размера тхп. Заполнение происходит по столбцам. Величина п (но нет!) может принимать значение Inf.

[A,count,errmsg,nextindex] = sscanf(. ) — считывает данные из символьной переменной s, преобразует их согласно значению format и возвращает в матрицу А. Параметр count — выходной.аргумент, который возвращает число успешно считанных элементов; errmsg — выходной аргумент, который возвращает строку ошибки, если ошибка произошла, и пустую строку в противном случае; nextindex — выходной аргумент, который содержит число, на единицу большее, чем количество символов в s.

Строка format состоит из обычных символов и спецификаторов. Спецификаторы указывают тип данных и включают в себя символ %, опцию ширины поля и символы формата. Пояснения можно найти в описании функции fscanf.

Diplom Consult.ru

Каждый открытый файл, как уже отмечалось, имеет скрытый указатель на текущую позицию в нем. При открытии файла этот указатель устанавливается на начало данных, и все операции в файле будут производиться с данными, начинающимися в этой позиции.

При каждом выполнении функции чтения или записи указатель смещается на количество прочитанных или записанных байт, т.е. устанавливается после прочитанного или записанного блока данных в файле – это последовательный доступ к данным.

В языке Си/С++ можно установить указатель на некоторую заданную позицию в файле. Для этого используют стандартную функцию fseek, которая позволяет выполнить чтение или запись данных в произвольном порядке.

Декларация функции позиционирования следующая:

Значение параметра size задает количество байт, на которое необходимо сместить указатель в файле f, в направлении параметра code, который может принимать следующие значения:

– смещение от начала файла –

– смещение от текущей позиции –

– смещение от конца файла –

Таким образом, смещение может быть как положительным, так и отрицательным, но нельзя выходить за пределы файла.

В случае успеха функция возвращает нулевое значение, а в случае ошибки (например, попытка выхода за пределы файла) – единицу.

Доступ к файлу с использованием функции позиционирования (fseek) называют произвольным доступом.

Иногда нужно определить текущее положение в файле. Для этого используют функцию со следующей декларацией:

которая возвращает значение указателя на текущую позицию в файле или –1 в случае ошибки.

14.5. Дополнительные файловые функции

В заключение рассмотрим наиболее распространенные функции, с помощью которых можно организовать работу с файлами:

int fileno (FILE *f) – определяет и возвращает значение дескриптора (fd) файла f, т.е. число, определяющее номер файла;

long filelength (int fd) – возвращает длину файла, имеющего дескриптор fd , в байтах;

int chsize (int fd, long pos) – выполняет изменение размера файла, имеющего номер fd, признак конца файла устанавливается после байта с номером pos;

int feof (FILE *f) – возвращает ненулевое значение при правильной записи признака конца файла;

Пример программы работы с файлом структур

Создать программу, в которой реализованы создание, добавление и просмотр файла, содержащего информацию о фамилии и среднем балле студентов. Процесс добавления информации заканчивается при нажатии точки.

FILE* Open_file(char*, char*);


int i, j, kodR, size = sizeof(Sved), kod_read;

puts(«Создать – 1\n Добавить– 3\nПросмотреть– 2\nВыход – 0»);

if(kodR==1) F_zap = Open_file (Spis,»w+»);

else F_zap = Open_file (Spis,»a+»);

puts(«\n Fam (. – end) «);

case 2: F_zap = Open_file (Spis,»r+»); int nom=1;

printf(» %2d: %20s %5.2lf\n»,

nom++, zap.Fam, zap.S_Bal);

case 0: return; // exit(0);

// Функция обработки ошибочной ситуации при открытии файла

fseek — Устанавливает смещение в файловом указателе

(PHP 4, PHP 5, PHP 7)

fseek — Устанавливает смещение в файловом указателе

Описание

Устанавливает смещение в файле, на который ссылается handle . Новое смещение, измеряемое в байтах от начала файла, получается путём прибавления параметра offset к позиции, указанной в параметре whence .

В общей сложности, разрешается указывать смещение за пределами конца файла, если данные потом будут записаны в этой позиции, чтение любого незаписанного региона между концом файла и указанной позицией возвратит нулевые байты. Однако, определенные потоки могут не поддерживать это поведение, особенно если они оперируют над хранилищем фиксированного размера.

Список параметров

Указатель ( resource ) на файл, обычно создаваемый с помощью функции fopen() .

Для смещения позиции перед концом файла необходимо передать отрицательное значение offset и установить параметр whence в SEEK_END .

Значениями whence являются:

  • SEEK_SET — Устанавливает смещение в offset байт.
  • SEEK_CUR — Устанавливает смещение в текущее положение плюс offset .
  • SEEK_END — Устанавливает смещение в конец файла плюс offset .

Возвращаемые значения

В случае успеха возвращает 0; в противном случае возвращает -1.

Примеры

Пример #1 Пример использования функции fseek()

= fopen ( ‘somefile.txt’ , ‘r’ );

// читаем немного данных
$data = fgets ( $fp , 4096 );

// перемещаемся назад к началу файла
// то же самое, что и rewind($fp);
fseek ( $fp , 0 );

Примечания

Если файл открыт в режиме «записи в конец» (a или a+), любые записываемые в файл данные будут записываться в конец, вне зависимости от позиции файла, а результат вызова fseek() будет не определен.

Не все потоки поддерживают смещение указателя. Для потоков, не поддерживающих эту операцию, смещение вперед осуществляется чтением и отбрасыванием данных, другие формы смещения закончатся ошибкой.

Смотрите также

  • ftell() — Сообщает текущую позицию чтения/записи файла
  • rewind() — Сбрасывает курсор у файлового указателя
Илон Маск рекомендует:  Программное вращение изображений
Понравилась статья? Поделиться с друзьями:
Кодинг, CSS и SQL