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

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

Восстановить пароль Регистрация
 
Рейтинг: Рейтинг темы: голосов - 18, средняя оценка - 4.72
byte255
1 / 1 / 0
Регистрация: 26.12.2010
Сообщений: 8
26.12.2010, 00:56     Как изменить один байт в бинарном файле? #1
Здравствуйте.
Второй день бьюсь над вопросом, просмотрел много примеров, но не понимаю, помогите.
Мне нужно изменить один байт в бинарном файле. Для этого использую следующий код.
Например, есть размером 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.
Подскажите, в чем дело может быть? Сон потерял =)
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
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();
}
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     Как изменить один байт в бинарном файле?
Ответ Создать тему
Опции темы

Текущее время: 22:02. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru