Редактирование бинарных файлов

Программирование на Visual Basic, главный форум. Обсуждение тем программирования на VB 1—6.
Даже если вы плохо разбираетесь в VB и программировании вообще — тут вам помогут. В разумных пределах, конечно.
Правила форума
Темы, в которых будет сначала написано «что нужно сделать», а затем просьба «помогите», будут закрыты.
Читайте требования к создаваемым темам.
Grom
Начинающий
Начинающий
 
Сообщения: 6
Зарегистрирован: 04.07.2008 (Пт) 5:26

Редактирование бинарных файлов

Сообщение Grom » 01.11.2008 (Сб) 13:11

Как можно заменить внутри б/файла одну часто повторяющуюся строку на другую?

alibek
Большой Человек
Большой Человек
 
Сообщения: 14205
Зарегистрирован: 19.04.2002 (Пт) 11:40
Откуда: Russia

Re: Редактирование бинарных файлов

Сообщение alibek » 01.11.2008 (Сб) 13:40

А как ты пытался это сделать?
Lasciate ogni speranza, voi ch'entrate.

Lumen
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 841
Зарегистрирован: 03.12.2005 (Сб) 16:09
Откуда: Брянск

Re: Редактирование бинарных файлов

Сообщение Lumen » 01.11.2008 (Сб) 18:21

Можно считать файл в строку, предварительно выделив под нее память исходя из размера файла и заполнив её Chr(0), потом пройтись Replace'ом...
Подпись проходит рефакторинг

Хакер
Телепат
Телепат
Аватара пользователя
 
Сообщения: 16478
Зарегистрирован: 13.11.2005 (Вс) 2:43
Откуда: Казахстан, Петропавловск

Re: Редактирование бинарных файлов

Сообщение Хакер » 02.11.2008 (Вс) 7:35

Но лучше в массив байтов.
—We separate their smiling faces from the rest of their body, Captain.
—That's right! We decapitate them.

awl100Alex
Постоялец
Постоялец
 
Сообщения: 355
Зарегистрирован: 29.01.2008 (Вт) 15:19
Откуда: Украина

Re: Редактирование бинарных файлов

Сообщение awl100Alex » 16.11.2008 (Вс) 1:41

Grom
Интересно, зачем это тебе понадобилось???
На самом деле такая задача решается просто. Берем некий бинарный файл «Binary.file» в 79 байт, открываем его
в Скачать WinHex 11.6 Rus Help и замечаем некую повторяющуюся последовательность двух байт (EF D8) в разных местах файла. Пишем код для замены...

Код: Выделить всё
'Инициируем нумерацию массивов с единицы, чтобы исключить искажения сигнатур...
Option Base 1
'Создаем динамические массивы...
Dim Signature() As Byte    'Сигнатура искомых байтов
Dim ReplaceBytes() As Byte 'Сигнатура заменяемых байтов
Dim Buffer() As Byte       'Буфер пространства поиска

Private Sub Form_Load()
'Откроем файл для двоичного доступа...
FileNumber = FreeFile 'Получаем свободный файловый номер
Open App.Path & "\" & "Binary.file" For Binary As FileNumber

'Переопределяем массивы и загружаем сигнатуры, как последовательности байтов
ReDim Signature(2) As Byte
For b = 1 To 2
  Signature(b) = Choose(b, &HEF, &HD8) 'Два искомых байта - EF D8
Next b

ReDim ReplaceBytes(2) As Byte
For b = 1 To 2
  ReplaceBytes(b) = Choose(b, &HDA, &HDA) 'Байты замены - DA DA
Next b

ReDim Buffer(LOF(FileNumber))
Get FileNumber, , Buffer 'Загружаем байты Binary.file в массив пространства поиска

Seek FileNumber, 1 'Устанавливаем позицию в начало, далее смещение автоматическое
1:  Pos = InStrB(Seek(FileNumber), Buffer(), Signature(), vbBinaryCompare)
  If Pos Then 'Если позиция не равна нулю, искомая сигнатура найдена...
   Put FileNumber, Pos, ReplaceBytes 'Заменяем байты сигнатуры
   GoTo 1
  End If
 
Close FileNumber
End
End Sub


Вот и все! Результаты и сам проект см. в приложении...
Желаю удачи! :)

P.S.
Lumen
А вот Replace(Buffer(), Signature(), ReplaceBytes(), 1, -1, vbBinaryCompare)
– ведет себя как-то загадочно... :( Где меняет байты, а где просто тупо пропускает и хоть тресни. :(
Видимо есть какие-то условия, которые нужно дополнительно учитывать??? Не знаю...
Вложения
Binary.file.jpg
Результат работы кода...
Binary.file.jpg (377.33 Кб) Просмотров: 1694
Project - bbs.vbstreets.ru.rar
Проект разработки...
(5.64 Кб) Скачиваний: 957


Вернуться в Visual Basic 1–6

Кто сейчас на конференции

Сейчас этот форум просматривают: Google-бот, Yandex-бот и гости: 103

    TopList