Форум программистов, компьютерный форум CyberForum.ru

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 64, средняя оценка - 4.78
CyberHunter
12 / 12 / 1
Регистрация: 03.08.2010
Сообщений: 61
#1

Бинарное чтение из файла с пoмощью функции fread() - C++

15.08.2010, 18:05. Просмотров 8248. Ответов 10
Метки нет (Все метки)

Подскажите, пожалуйста, почему feof() может возвращать конец файла далеко до его реального конца? Конец проверяется из обозревателя файлов или функциями fseek() ftell(), - значение одно, а feof() выдаёт конец на 8Кб, хотя реальный размер файла 23Кб, причём я его забил пробелами в ультраэдите, теперь читается до конца.
Как может метка конца бинарного файла зависеть от содержимого? Я полагал, что fread() обращается к файловой системе за обнаружением конца файла... Заранее спасибо.

Добавлено через 13 минут
Пробовал студией 6 и devcpp, результат один. Или у меня ntfs навернулась
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Евгений М.
1035 / 976 / 54
Регистрация: 28.02.2010
Сообщений: 2,824
Завершенные тесты: 2
15.08.2010, 18:52     Бинарное чтение из файла с пoмощью функции fread() #2
Вот код:
C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
#include <stdio.h>
 
int main()
{
    unsigned long i=0;
    char ch;
    FILE* fp;
    fp=fopen("input.bin", "rb");
    while(!feof(fp))
    {
        fread(&ch, 1, 1, fp);
        i++;
    }
    printf("%d\n", i);
    return 0;
}
Выдает сколько нужно. Скорее всего проблема в Вашем коде.
input.bin во вложениях.
Вложения
Тип файла: zip input.zip (6.3 Кб, 76 просмотров)
CyberHunter
12 / 12 / 1
Регистрация: 03.08.2010
Сообщений: 61
15.08.2010, 19:07  [ТС]     Бинарное чтение из файла с пoмощью функции fread() #3
вот мой код, там 2 файла одинакового р-ра, а feof выдаёт разный результат, проверьте у себя, пожалуйста, может у меня винда навернулать окончательно...<ссылка удалена>
мой код:
C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
#include <stdio.h>
#include <conio.h>
#include <stdlib.h>
#include <windows.h>
 
typedef double dbl;
 
int main()
{
    dbl l[1];
    FILE *gg;
    int summ = 0;
    gg = fopen("123.bin", "r");
    if(gg)
    while(!feof(gg))
    {
        summ+=fread(&l, 8, 1, gg);
    }
    printf("%d\n", summ);
    fcloseall();
 
//второй файл
    gg = fopen("1234.bin", "r");
    summ = 0;
    if(gg)
    while(!feof(gg))
    {
        summ+=fread(&l, 8, 1, gg);
    }
    printf("%d\n", summ);
    getch();
    fcloseall();
    return 0;
}
 Комментарий модератора 
Прикрепляйте картинки, архивы и прочее к сообщениям.
ForEveR
В астрале
Эксперт С++
7968 / 4730 / 320
Регистрация: 24.06.2010
Сообщений: 10,539
Завершенные тесты: 3
15.08.2010, 19:10     Бинарное чтение из файла с пoмощью функции fread() #4
CyberHunter, Конечно вроде как не принципиально. Но блин.

C
1
gg=fopen("1234.bin", "rb");
CyberHunter
12 / 12 / 1
Регистрация: 03.08.2010
Сообщений: 61
15.08.2010, 19:11  [ТС]     Бинарное чтение из файла с пoмощью функции fread() #5
Цитата Сообщение от Lavroff Посмотреть сообщение
gg=fopen("1234.bin", "rb");
Попробую, это тэг для бинарного считывания?
ForEveR
В астрале
Эксперт С++
7968 / 4730 / 320
Регистрация: 24.06.2010
Сообщений: 10,539
Завершенные тесты: 3
15.08.2010, 19:11     Бинарное чтение из файла с пoмощью функции fread() #6
CyberHunter, Да.
Евгений М.
1035 / 976 / 54
Регистрация: 28.02.2010
Сообщений: 2,824
Завершенные тесты: 2
15.08.2010, 19:12     Бинарное чтение из файла с пoмощью функции fread() #7
Это из вашего кода:
C++
1
gg = fopen("123.bin", "r");
Это не бинарное чтение.
Правильнее так:
C++
1
gg = fopen("123.bin", "rb");
CyberHunter
12 / 12 / 1
Регистрация: 03.08.2010
Сообщений: 61
15.08.2010, 19:12  [ТС]     Бинарное чтение из файла с пoмощью функции fread() #8
Lavroff, Евгений М., большое Вам СПАСИБО! Проблема решена. Тему можно закрыть.
Евгений М.
15.08.2010, 19:13
  #9

Не по теме:

Как быстро пишу. Уже 3 ответа.

easybudda
Эксперт С++
9456 / 5469 / 927
Регистрация: 25.07.2009
Сообщений: 10,495
15.08.2010, 22:07     Бинарное чтение из файла с пoмощью функции fread() #10
Цитата Сообщение от Lavroff Посмотреть сообщение
Конечно вроде как не принципиально.
Ещё как принципиально! Вообще в винде при работе с файлами, как с бинарными, а не текстовыми, обязательно открывать файлы, как бинарные. В противном случае никаким "чудесам" можно не удивляться...
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
15.08.2010, 22:12     Бинарное чтение из файла с пoмощью функции fread()
Еще ссылки по теме:
C++ Функции fread() и fwrite()
C++ Считывание из файла (fread) в вектор
C++ Объясните работу функции fread()
Аналог С функции fread и fwrite в С++ C++
C++ Как работают функции fwrite и fread

Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
ForEveR
В астрале
Эксперт С++
7968 / 4730 / 320
Регистрация: 24.06.2010
Сообщений: 10,539
Завершенные тесты: 3
15.08.2010, 22:12     Бинарное чтение из файла с пoмощью функции fread() #11
easybudda, Да) Я потом уже понял) Исправлять лень было)
Yandex
Объявления
15.08.2010, 22:12     Бинарное чтение из файла с пoмощью функции fread()
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru