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

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

Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 18, средняя оценка - 4.72
byte255
1 / 1 / 0
Регистрация: 26.12.2010
Сообщений: 8
#1

Как изменить один байт в бинарном файле? - C++

26.12.2010, 00:56. Просмотров 2354. Ответов 3
Метки нет (Все метки)

Здравствуйте.
Второй день бьюсь над вопросом, просмотрел много примеров, но не понимаю, помогите.
Мне нужно изменить один байт в бинарном файле. Для этого использую следующий код.
Например, есть размером 1 гигабайт, мне нужно изменить десятый байт, записать в него 0x0A.
Для этого использую следующий код.
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
void BinFile::writeByte(long pos, char byte)
{
    ofstream bin(this->filename, ios_base::binary);
    bin.seekp(pos,ios_base::beg);
    bin.put(byte);
    bin.close();
}
 
int main()
{
   int main ()
  {
     BinFile f("file.bin");
     f.writeByte(10, 10);
  }
}
В итоге, десятый байт дейтвительно становится равен 0x0A, но остальные становятся равны 0х00.
Может быть так, и должно быть?
Вариант
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
#include <stdio.h>
using namespace std;
 
int main()
{
    FILE *fw;
    fw = fopen("pack.pck", "wb");
    char ch = 'x';
    fseek(fw, 0, SEEK_SET);
    fwrite(&ch, sizeof(char), 1, fw);
    fclose(fw);
    return 0;
}
приводит к тому же результату - первый (нулевой) байт 0х78, остальные - 0.
Подскажите, в чем дело может быть? Сон потерял =)
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
26.12.2010, 00:56     Как изменить один байт в бинарном файле?
Посмотрите здесь:

Как изменять 1 байт в бинарном файле? - C++
Здравствуйте! Требуется помощь. Необходимо создать неcколько исполняемых файлов под windows, позволяющих изменять 1 байт в файле...

Шальной байт в бинарном файле - C++
Здравствуйте, форумчане. Столкнулся с такой проблемой при использовании оператора write(memblock, sizeof(memblock)) для записи в бинарный...

Не получается изменить данные в бинарном файле - C++
Здравствуйте. Мучаюсь, не пойму как сделать чтобы изменить данные. Программа обращается к файлу с базой (структуре).В структуре счет,...

Как заменить цифру в бинарном файле? - C++
В программе нужно заменить цифру в бинарном файле. Возникла проблема с функцией замены swap_val. Считывает не цифру, а невесть что, к тому...

Посчитать в файле количество нулевых байт и различных байт - C++
Посчитать в файле кол-во нулевых байт и различных байт Кто решит буду весьма благодарен!:drink:

Как в бинарном файле (.dat) удалять и редактировать выбранную запись - C++
Подскажите как в бинарном файле(.dat) удалять и редактировать выбранную запись(case 5 и case 6): #include &quot;stdafx.h&quot; #include...

После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
knkd
37 / 36 / 2
Регистрация: 08.08.2010
Сообщений: 162
26.12.2010, 01:24     Как изменить один байт в бинарном файле? #2
C
1
fw = fopen("pack.pck", "wb")
Вы открываете файл только для записи.
При этом всё его содержимое уничтожается.
В Си нужно поставить
C
1
fw = fopen("pack.pck", "r+b")
В С++ ищите сами флаг для чтения и записи.
byte255
1 / 1 / 0
Регистрация: 26.12.2010
Сообщений: 8
26.12.2010, 01:59  [ТС]     Как изменить один байт в бинарном файле? #3
Огромное спасибо, вполне устраивает вариант на С.

Добавлено через 30 минут
Ну и на всякий случай, чтобы поставить точки над i напишу здесь флаги С++ (чтобы от меня тоже была польза =) )
C++
1
2
3
4
5
6
7
void BinFile::writeByte(long pos, char byte)
{
    ofstream bin(this->filename, ios_base::in|ios_base::binary); //фактически "r+b"
    bin.seekp(pos,ios_base::beg);
    bin.put(byte);
    bin.close();
}
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
11.12.2015, 15:33     Как изменить один байт в бинарном файле?
Еще ссылки по теме:

Как изменить первые 5 байт в строке типа char - C++
Ламерский вопрос! Есть строка,как изменить в ней первые 5 байт, в них должна храниться длина строки

Как прочитать несколько байтов в файле с n-го байта по m-й байт ? - C++
Как прочитать несколько байтов в файле с n-го байта по m-й байт ?

Как в файле удалить n байт, начиная с заданной позиции - C++
Вопрос: как в файле удалить n байт начиная с заданной позиции? (файловый ввод-вывод в стиле C++)

Как задать переменную в бинарном формате? (В шестнадцатиричном через Х, а бинарном?) - C++
То есть какой синтаксис ваще? для 16-иричной НОЛЬ икс ЧИСЛО, к примеру, могу задать float, добавив в конце f, а как задать бинарное...

БД в бинарном файле - C++
Доброго времени суток! Нужно создать БД, которая хранит несколько таблиц. БД с ее данными должна храниться в бинарном файле на диске....

Сортировка в бинарном файле - C++
Люди подскажи те как мне сделать то что от меня требует препад, он говорит сделать отсортировку информации в самом бинарном файле. я не...


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

Или воспользуйтесь поиском по форуму:
Viktor1971
0 / 0 / 0
Регистрация: 11.12.2015
Сообщений: 2
11.12.2015, 15:33     Как изменить один байт в бинарном файле? #4
Здравствуйте!
Требуется помощь. Необходимо создать неcколько исполняемых файлов под windows, позволяющих изменять 1 байт в файле rungame.exe(бинарный), который будет находится в одной папке, с созданными файлами. При запуске файла, должно значение по адресу 548d0h, поменяться на 01 (единица). Попробовал использовать вышерасположенный код, но ничего не получилось... Если кто-нибудь может предложить что-то реально работающее, буду очень рад.
Yandex
Объявления
11.12.2015, 15:33     Как изменить один байт в бинарном файле?
Ответ Создать тему
Опции темы

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