[DELPHI] hex editor

0

W jaki sposób wczytać plik obojętnie jakiego formatu,a potem zmienić jakieś wartości znając adres komórki w tym pliku a na koniec jak z powrotem zapisać ten plik?

0

Zainteresuj się przykładowym kodem, a może na jego podstawie jakoś ogarniesz jak w
otwartym pliku ustalić pozcyję, wtedy przed otwarciem proponuje przypisac plik choćby
do TMemoryStream, a później na nim operować przy zmianach bajtów, a i po zmianach
zapisać go ponownie. Link: http://www.speedyshare.com/files/26625967/hex_view.rar
aktywny siedem dni od ostatniego pobrania. Chociaż rozumiem, że taki Hex Edytor to w
sumie chcesz napisać dla własnej satysfakcji, bo Hiew czy HexWorkshop nie przebijesz.

0
procedure openfile(nazwapliku:String;Memo:TMemo);
var
Memory:TMemoryStream;
Buffer:Byte;
begin
Memo.Clear;
Memory:=TMemoryStream.Create;        
Memory.LoadFromFile(nazwapliku);     
Memory.Position:=0;       
repeat
Memory.ReadBuffer(Buffer,1);      
Memo.SelText :=IntToHex(Buffer,2); 
until Memory.Position =Memory.Size ;
Memory.Free;
end;

Za pomocą tego kodu wczytuje plik,ale strasznie to powoli idzie. Przy kilku megabajtach pliku nie można doczekać się końca.
W jaki sposób mógłbym przyspieszyć ten proces?
Drugie pytanie jak zamienić jakiś bajt na inny znając jego położenie a następnie zapisanie pliku?

0

Użyj TFileStream z opcją fmOpenReadWrite, do odczytu wykorzystujesz Read, do zapisu Write. Miejsce zapisu/odczytu wskazujesz przez Position.
Pamiętaj, żeby na koniec zwolnić obiekt (Free). Możesz oczywiście wykorzystać sekwencje (ustawić pozycję, zapisać coś, zmienić pozycję i zapisać coś gdzie indziej).
Używając TFileStream wykonujesz operacje bezpośrednio na pliku (z kolei TMemoryStream wgrywa plik do pamięci), dlatego dobrze przed jakąkolwiek zmianą zrobić kopię zapasową pliku !

0

Bo trzeba najpierw operować na niewizualnych obiektach przechowujących Stringi, a także nie robić
tego bajt po bajcie tylko większym buforem. Zobacz na kod, pod poniższym adresem. Znalazłem go
kiedyś googlując http://www.speedyshare.com/files/26639869/hex.rar jednak na potrzeby tego by
wyświetlić ładnie komórki hex i obok ich reprezentacje tekstową (w tym przykładzie wyżej jest to w
sposób klasyczny zrobione po 16 komórek na wiersz) trzeba by posłużyć się jakimś komponentem,
nie wiem - na bazie StringGrid albo własnym napisanym aby ładnie wyświetlić dane i móc także ich
pozycje w łatwy sposób określić, a co do edycji to tak jak wspomniałem, ładujesz jakiś plik także do
TMemoryStream i ustawiajać Position na Offset i zapisujesz tam wartość Bajtu na tę zmodyfikowaną.

EDIT: pobawiłem się chwilę i stworzyłem to: http://www.speedyshare.com/files/26647121/simple_hex_editor.rar
nie ma wyszukiwania, nie ma podświetlania wartości w polu z ASCII po zaznaczeniu wartości hex i nie ma sprawnej
edycji, ale jest odczyt oraz zapis. Więcej po prostu mi się nie chcialo bawić, bo dośc słabo ogarniam StringGrid.

1 użytkowników online, w tym zalogowanych: 0, gości: 1