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

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

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

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

26.12.2010, 00:56. Просмотров 2395. Ответов 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.
Подскажите, в чем дело может быть? Сон потерял =)
0
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
26.12.2010, 00:56
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Как изменить один байт в бинарном файле? (C++):

Как изменять 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")
В С++ ищите сами флаг для чтения и записи.
1
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();
}
1
Viktor1971
0 / 0 / 0
Регистрация: 11.12.2015
Сообщений: 2
11.12.2015, 15:33 #4
Здравствуйте!
Требуется помощь. Необходимо создать неcколько исполняемых файлов под windows, позволяющих изменять 1 байт в файле rungame.exe(бинарный), который будет находится в одной папке, с созданными файлами. При запуске файла, должно значение по адресу 548d0h, поменяться на 01 (единица). Попробовал использовать вышерасположенный код, но ничего не получилось... Если кто-нибудь может предложить что-то реально работающее, буду очень рад.
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
11.12.2015, 15:33
Привет! Вот еще темы с ответами:

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

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

Как заменить, перезаписать нужный мне байт в файле? - C++
Здравия всем! В общем, дело такое, есть файл с 8 байтами, первый отвечает за тип, второй - за время жизни и после времени жизни есть...

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


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

Или воспользуйтесь поиском по форуму:
Yandex
Объявления
11.12.2015, 15:33
Ответ Создать тему
Опции темы

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