Форум программистов, компьютерный форум, киберфорум
Наши страницы

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

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

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

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

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

Добавлено через 13 минут
Пробовал студией 6 и devcpp, результат один. Или у меня ntfs навернулась
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
15.08.2010, 18:05
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Бинарное чтение из файла с пoмощью функции fread() (C++):

чтение данных из открытого файла (fread) - C++
if (_wfopen_s(&f, file_name, L"rtS, ccs=UTF-8") == 0){ fread((void*)rf, sizeof(wchar_t), 512, f); ...

Бинарное чтение файла - C++
FILE *ftm; ftm = _wfopen(fff, L"r+"); //fff - это переменная wchar_t содержащая имя файла! unsigned short buf = { 0 }; ...

Бинарное чтение файла - C++
Что за каракули в конце файла,? Спасибо.

Максимально эфективное бинарное чтение из файла под Windows - C++
Задача: максимально эфективно (быстро) читать данные из файла. Каким это будет происходить образом - в виде си функции, с++ или винапи...

Передача параметров функции с пoмощью указателя - C++
Всем доброго времени суток, есть обычная функция, возвращающая сумму цифр числа: int sumOfNum(int N) { int sum = 0; while(N >...

fwrite\fread: чтение и запись в бинарные файлы - C++
Добрый день. Пытаюсь разобратся с чтением и записью в бинарные файлы.. в общем обрисую в краце проблему, записываю класс. class tPoint ...

10
Евгений М.
1037 / 978 / 54
Регистрация: 28.02.2010
Сообщений: 2,829
Завершенные тесты: 2
15.08.2010, 18:52 #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 во вложениях.
1
Вложения
Тип файла: zip input.zip (6.3 Кб, 76 просмотров)
CyberHunter
12 / 12 / 1
Регистрация: 03.08.2010
Сообщений: 61
15.08.2010, 19:07  [ТС] #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;
}
 Комментарий модератора 
Прикрепляйте картинки, архивы и прочее к сообщениям.
0
ForEveR
В астрале
Эксперт С++
7988 / 4747 / 321
Регистрация: 24.06.2010
Сообщений: 10,547
Завершенные тесты: 3
15.08.2010, 19:10 #4
CyberHunter, Конечно вроде как не принципиально. Но блин.

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

Не по теме:

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

0
easybudda
Модератор
Эксперт CЭксперт С++
9912 / 5835 / 975
Регистрация: 25.07.2009
Сообщений: 11,004
15.08.2010, 22:07 #10
Цитата Сообщение от Lavroff Посмотреть сообщение
Конечно вроде как не принципиально.
Ещё как принципиально! Вообще в винде при работе с файлами, как с бинарными, а не текстовыми, обязательно открывать файлы, как бинарные. В противном случае никаким "чудесам" можно не удивляться...
1
ForEveR
В астрале
Эксперт С++
7988 / 4747 / 321
Регистрация: 24.06.2010
Сообщений: 10,547
Завершенные тесты: 3
15.08.2010, 22:12 #11
easybudda, Да) Я потом уже понял) Исправлять лень было)
0
15.08.2010, 22:12
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
15.08.2010, 22:12
Привет! Вот еще темы с ответами:

Функции fread() и fwrite() - C++
Меня интересует что это за &quot;счётчик&quot; в этих функциях fwrite( massiv, *size_int * sizeof(unsigned int), 1, fp); &lt;= в большинстве примеров...

Параметры функции fread - C++
Вот программа: _____________________ #include &lt;iostream&gt; #include &lt;stdio.h&gt; #include &lt;conio.h&gt; #include &lt;string.h&gt; using...

Считывание из файла (fread) в вектор - C++
typedef std::vector&lt;float&gt; TvFloat; TvFloat LineBuff; FILE* InFile = fopen(GRFPath.c_str(),&quot;rb&quot;); LineBuff.resize(CntParsInGRF); ...

Аналог С функции fread и fwrite в С++ - C++
Здравствуйте, какие есть аналоги функций fread() fwrite в С++?


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

Или воспользуйтесь поиском по форуму:
11
Ответ Создать тему
Опции темы

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