Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

Лыжи не едут :-( c fread(), fseek() совладать не могу...

6.4K
25 марта 2004 года
rtfm
5 / / 10.03.2004
Hi ! People !!
Помогите плз советом бесплатным !
Делаю так:
int read_pack()
{
FILE* in;
head h;
in = fopen("test.tst","rb");
do {
//Прочитаем
fread(&h, sizeof(head), 1, in);
// На след запись
fseek(in, sizeof(head), SEEK_CUR);
printf("%d...\n", h.n,...);
} while (! feof(in));
fclose(in);
return 0;
}

Дык почему-то 1_е две записи читает из _бинарника_, а потом только вторую все время...
Сабж ! Киньте письмишко на мыло, плз...
[email]RTFM-LMD@YANDEX.RU[/email]
Премного благодарен...
247
25 марта 2004 года
wanja
1.2K / / 03.02.2003
А разве при fread() он сам не переходит на след. запись?
6.4K
25 марта 2004 года
rtfm
5 / / 10.03.2004
Цитата:
Originally posted by wanja
А разве при fread() он сам не переходит на след. запись?



В хелпе конечно так и сказано, что должен...
Ты удивишься, но ни fread() ни fseek() не
помогают 8-)) (вернее не работают как написано)
Но самое интересное, что у файла открытого по fopen()потом EOF отловить у меня ни
feof() ни в самом возврате fseek() мне не удалось.

Очевидно лыжи таки не едут. Кто-бы объяснил в чем дело.

Хотя в общем вопрос снят.... 8-))
Все элегантно решается через хандлы (open())

6.4K
25 марта 2004 года
rtfm
5 / / 10.03.2004
Цитата:
Originally posted by wanja
А разве при fread() он сам не переходит на след. запись?



Компилилось кстати в BC++ 3.11
Но это так, к слову...

7.2K
25 марта 2004 года
esergey
2 / / 19.03.2004
Цитата:
Originally posted by rtfm


Компилилось кстати в BC++ 3.11
Но это так, к слову...


Да бывают глюки.
Я однажды два дня искал ошибку в проге, а оказалось что fread почему то не читает файл. Матюгался долго.

5.8K
26 марта 2004 года
Digi
15 / / 25.03.2004
Цитата:
Originally posted by rtfm

{
FILE* in;
head h;
in = fopen("test.tst","rb");
do {
//Прочитаем
fread(&h, sizeof(head), 1, in);
// На след запись
fseek(in, sizeof(head), SEEK_CUR);
printf("%d...\n", h.n,...);
} while (! feof(in));
fclose(in);
return 0;
}



Не знаю конечно, вот такой код:

Код:
#include  <stdio.h>
#include <iostream.h>

void main(void)
{
    FILE *in;
    int n=0;
    int data;

    in = fopen("test.dat", "w+b");

    for (n=0; n<3; n++)
    {
        cout << "Input digit: ";
        flush(cout);
        cin >> data;
        fwrite(&data, sizeof(int), 1, in);
    }

    fclose(in);

    in = fopen("test.dat", "rb");  
    while (!feof(in))
    {      
        fread(&data, sizeof(int), 1, in);
        cout << "Digit: " << data << endl;
    }
    fclose(in);
};


У меня все работает. Единственная проблема, дык это то, что последнюю запись из файла выводит 2 раза.
Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог