Хелпикс

Главная

Контакты

Случайная статья





Увага!!! При відкритті не забути вказати, що файл двійковий (b).



Увага!!! При відкритті не забути вказати, що файл двійковий (b).

 

ДОВІЛЬНИЙ ДОСТУП: fseek( )

Функція fseek( ) дозволяє нам обробляти файл подібно масиву й безпосередньо досягати будь-якого певного байта у файлі, відкритому функцією fopen(). Помітимо, що fseek() має три аргументи й повертає значення типу int.

/' використання fseek( ) для друку вмісту файлу */

#include <stdio.h>

main()

int number;

char names[80];

{

FILE *fp;

cin>>names;

long offset = 0L; /* зверніть увагу, що це тип long */

if ((fp = fopen (names, "r")) = = 0)

printf (“ Я не можу відкрити %s.\n", names);

else

{

while ( fseek (fp, offset++, 0) = = 0)

putchar (getc (fp) );

fclose (fp);

}

    }

Перший із трьох аргументів функціїfseek() є вказівником типуFILE на файл, у якім ведеться пошук. Файл слід відкрити, використовуючи функціюfopen( ).

Другий аргумент названий “offset” (от чому ми вибрали дане ім'я для змінної). Цей аргумент повідомляє, як далеко слід пересунутися від початкової крапки (див. нижче); він повинен мати значення типуlong, яке може бути позитивним (рух уперед) або негативним (рух назад).

Третій аргумент є кодом, що визначають початкову крапку:

Код           Положення у файлі

0 початок файлу

1 поточна позиція

2 кінець файл ( у деяких системах може не передбачатися)

Функція fseek() повертає 0, якщо всі добре, і -1, якщо є помилка, наприклад спроба переміщатися за межі файлу. Тепер ми можемо роз'яснити наш маленький цикл:

while ( fseek (fp, offset+ +, 0) = = 0) putchar(getc(fp) );

Оскільки зміннаoffset ініціалізована нулем, при першім проходженні через цикл ми маємо вираз

fseek (fp, 0L, 0)

означаюче, що ми йдемо у файл, на який посилається вказівник fp, і знаходимо байт, що відстоїть на 0 байт від початку, тобто перший байт. Потім функціяputchar( ) друкує вміст цього байта. При наступнім проходженні через цикл змінна offset збільшується до1L, і друкується наступний байт. По суті, зміннаoffset діє подібно індексу для елементів файлу. Процес триває доти, покиoffset не спробує потрапити вfseek( ) після кінця файлу. У цьому випадкуfseek( ) повертає значення -1 і цикл припиняється.

Цей останній приклад чисто навчальний. Немає необхідності використовуватиfseek( ), тому щоgetc() так чи інакше проходить через файл байт за байтом;fseek() наказалаgetc() «подивитися» туди, куди вона сама вже збиралася подивитися.

/* друк в прямому й зворотному напрямках */



  

© helpiks.su При использовании или копировании материалов прямая ссылка на сайт обязательна.