Форум по Delphi программированию

Delphi Sources



Вернуться   Форум по Delphi программированию > Все о Delphi > [ "Начинающим" ]
Ник
Пароль
Регистрация <<         Правила форума         >> FAQ Пользователи Календарь Поиск Сообщения за сегодня Все разделы прочитаны

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
  #1  
Старый 14.09.2009, 17:36
Solpadeine Solpadeine вне форума
Прохожий
 
Регистрация: 14.09.2009
Сообщения: 3
Репутация: 10
По умолчанию Редактирование файла по байтам или как-то так...

Каким образом можно добавить данные в файл и отредактировать уже имеющиеся "по байтам", подскажите плиз. Например я знаю структуру какого-либо фала и могу редактить его HEX редактором, но хочу автоматизировать этот процесс с помощью Delphi, приведите пожалуйста пример (код). Заранее спасибо.
Ответить с цитированием
  #2  
Старый 14.09.2009, 17:52
lmikle lmikle вне форума
Модератор
 
Регистрация: 17.04.2008
Сообщения: 8,035
Версия Delphi: 7, XE3, 10.2
Репутация: 49089
По умолчанию

Например, с помощью файлового потока.

Код:
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  
Старый 14.09.2009, 18:09
Solpadeine Solpadeine вне форума
Прохожий
 
Регистрация: 14.09.2009
Сообщения: 3
Репутация: 10
По умолчанию

Отлично, спасибо, а как будет выглядеть код, например изменяющий в битмапе

424D4600000000000000360000002800000002000000020000 00010018000000
00001000000000000000000000000000000000000000FFFFFF 00000000000000
00FFFFFF0000

на
424D4600000000000000360000002800000002000000020000 00010018000000
00001000000000000000000000000000000000000000FFFFFF 00000000000000
FFFFFFFF0000
Ответить с цитированием
  #4  
Старый 14.09.2009, 18:44
lmikle lmikle вне форума
Модератор
 
Регистрация: 17.04.2008
Сообщения: 8,035
Версия Delphi: 7, XE3, 10.2
Репутация: 49089
По умолчанию

Ну так и будет. Только длинна данных будет другая. Можно, например, третьим параметром передать массив байт и все их в цикле записать.
Ответить с цитированием
  #5  
Старый 15.09.2009, 16:57
Solpadeine Solpadeine вне форума
Прохожий
 
Регистрация: 14.09.2009
Сообщения: 3
Репутация: 10
По умолчанию

А как вставить байт, не заменяя другие?
например FFFF FFFF заменять на FF00 FFFF FF
Ответить с цитированием
  #6  
Старый 16.09.2009, 09:39
roamer roamer вне форума
Активный
 
Регистрация: 15.04.2009
Сообщения: 369
Репутация: 93
По умолчанию

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;
Ответить с цитированием
Ответ


Delphi Sources

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB-коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход


Часовой пояс GMT +3, время: 12:46.


 

Сайт

Форум

FAQ

RSS лента

Прочее

 

Copyright © Форум "Delphi Sources" by BrokenByte Software, 2004-2023

ВКонтакте   Facebook   Twitter