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

C++

Войти
Регистрация
Восстановить пароль
 
antonboom
bmstu-team
301 / 136 / 56
Регистрация: 10.01.2012
Сообщений: 420
Записей в блоге: 10
#1

Fread(), fseek(), fwrite() - Переписка байтов - C++

02.06.2015, 22:54. Просмотров 501. Ответов 2

Всем привет.
Такой вопрос. Есть задача пройтись по бинарному файлу с вещественными числами и как-то изменить его элементы, пусть будет, умножить на 3.
Почему вот такой вариант (более логичный, как мне кажется) не работает, сбивается после 2-ого числа:
C++
1
2
3
4
5
6
7
8
double buf;
    fseek(fdata, 0L, SEEK_SET);                         
    while (!feof(fdata)){                               
        fread(&buf, sizeof(double), 1, fdata);  // можно для пущей важности (long)sizeof(double)        
        buf *= 3.0;                             
        fseek(fdata, -sizeof(double), SEEK_CUR);      
        fwrite(&buf, sizeof(double), 1, fdata);     
    }
А вот такой вариант (костыльный) работает:

C++
1
2
3
4
5
6
7
8
9
10
double buf;
    fseek(fdata, 0L, SEEK_SET);                         
    while (!feof(fdata)){                               
         fseek(fdata, -sizeof(double), SEEK_CUR);
         fread(&buf, sizeof(double), 1, fdata);
     buf *= 3.0;                                
         fseek(fdata, -sizeof(double), SEEK_CUR);     
         fwrite(&buf, sizeof(double), 1, fdata);    
         fseek(fdata, sizeof(double), SEEK_CUR);        
    }
Заранее спасибо

P.S. Прошу прощения за отступы, редактор чудит
0
Лучшие ответы (1)
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
02.06.2015, 22:54
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Fread(), fseek(), fwrite() - Переписка байтов (C++):

Баг в MinGW при использовании fread - C++
Ну собственно вот простой тестовый код который выполняется некорректно: #include <cstdio> using namespace std; const int N =...

заморочки функций fseek и fwrite - C++ Builder
Здравствуйте. Цель - перезаписать последний байт файла на любой другой (к примеру 0х55). В дальнейшем - другие байты. Делаю так: ...

Fread,fopen,fwrite - C++ Builder
Добрый день, пытаюсь считать бинарно данные из файла с помощью fread, а далее записать в другой файл. Выдает ошибку вида ...

fread&read...как использовать? - C++ Builder
доброе время суток! Хотелось бы поинтересоваться как от использования функции fread перейти к read. Сначала мой проект подразумевал...

Глючит fwrite (пишет 5 байт вместо 4) - C++ Builder
Среда: C++ Builder 2010. В некий файл пишутся всякие бинарные данные (типы char/int/long) при помощи fwrite. Казалось бы, задача проще...

Использование ф. fseek и fread - Visual C++
Читаю файл tga побайтово http://ru.wikipedia.org/wiki/Truevision_TGA Дошел до того месте где хранится само изображение.Далее мне...

2
gng
645 / 491 / 133
Регистрация: 08.09.2013
Сообщений: 1,326
03.06.2015, 12:29 #2
Лучший ответ Сообщение было отмечено автором темы, экспертом или модератором как ответ
Цитата Сообщение от antonboom Посмотреть сообщение
Почему вот такой вариант (более логичный, как мне кажется) не работает
Обе функции буферизованы. При переходе от чтения к записи и наоборот нужно fseek или fflash.

Добавлено через 6 минут
PS. Очепятка s/fflash/fflush/
1
antonboom
bmstu-team
301 / 136 / 56
Регистрация: 10.01.2012
Сообщений: 420
Записей в блоге: 10
03.06.2015, 14:46  [ТС] #3
gng, fflush от чего? Stdin, stdout? Просто я пробовал уже его вставлять, не работало

Добавлено через 2 часа 5 минут
Хм, в предыдущих примерах слукавил.
Действительно, с _flushall() все работает, но только в счетном цикле.
Если же использовать while, то похоже feof() тоже мешает.
Буду гуглить, спасибо
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
03.06.2015, 14:46
Привет! Вот еще темы с ответами:

Текстовый файл как результат работы fwrite(). - Visual C++
Использую в проекте запись в файл. Для этого юзаю функции fopen, fwrite и соответственно fclose из заголовочного файла stdio.h. Сам проект...

fseek / fread - C++
Всем привет! Такой вопрос возник. Есть строка, состоящая из нескольких "записей" в файле (буквы + числа). Нужно с помощью функций...

Fread() & fwrite() - C (СИ)
Помогите пожалуйста ,не могу понять как использовать функции fread() и fwrite(). И если можно ,пожалуйста с объяснением. Вот...

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


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

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

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