|
|
Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны |
|
Опции темы | Поиск в этой теме | Опции просмотра |
#1
|
|||
|
|||
Редактирование файла по байтам или как-то так...
Каким образом можно добавить данные в файл и отредактировать уже имеющиеся "по байтам", подскажите плиз. Например я знаю структуру какого-либо фала и могу редактить его HEX редактором, но хочу автоматизировать этот процесс с помощью Delphi, приведите пожалуйста пример (код). Заранее спасибо.
|
#2
|
|||
|
|||
Например, с помощью файлового потока.
Код:
procedure ReplaceByteInFile(AFileName : String; AOffset : Int64; AData : Byte); var F : TFileStream; begin F := TFileStream.Create(AFileName,fmOpenReadWrite); Try Finally F.Seek(AOffset,soFromBegining); F.WriteBuffer(AData,SizeOf(Byte)); F.Free; End; end; |
#3
|
|||
|
|||
Отлично, спасибо, а как будет выглядеть код, например изменяющий в битмапе
424D4600000000000000360000002800000002000000020000 00010018000000 00001000000000000000000000000000000000000000FFFFFF 00000000000000 00FFFFFF0000 на 424D4600000000000000360000002800000002000000020000 00010018000000 00001000000000000000000000000000000000000000FFFFFF 00000000000000 FFFFFFFF0000 |
#4
|
|||
|
|||
Ну так и будет. Только длинна данных будет другая. Можно, например, третьим параметром передать массив байт и все их в цикле записать.
|
#5
|
|||
|
|||
А как вставить байт, не заменяя другие?
например FFFF FFFF заменять на FF00 FFFF FF |
#6
|
|||
|
|||
FF00 - это уже далеко не байт а целое слово.
Как один из вариантов : Код:
function File_ChangeByte(FileName : string; NumByte : integer; ByteVal : byte) : boolean; Var Yes : boolean; F : file of byte; begin Result:=false; if NumByte>=0 then begin //проверка выхода за граница AssignFile(F,FileName); {$I-} reset(F) {$I+}; //файл откр. на чтение Yes:=(IoResult=0); if Yes then begin //удачно try if NumByte<FileSize(F) then begin //проверка выхода за граница {$I-} seek(F,NumByte){$I+}; //позициионируемся на нужном байте Yes:=(IoResult=0); if Yes then begin //успешно {$I-} write(F,ByteVal) {$I+}; //меняем значение байта Result:=(IoResult=0); end; end; finally {$I-} CloseFile(F) {$I+}; //закрываем файл Yes:=(IoResult=0); end; end; end; end; |