![]() |
|
|
|||||||
| Регистрация | << Правила форума >> | 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; |