Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Win32/Win64 API (native code) (https://www.delphipraxis.net/17-win32-win64-api-native-code/)
-   -   Delphi einen Hexwert in einer Datei ändern ... (https://www.delphipraxis.net/109163-einen-hexwert-einer-datei-aendern.html)

cherry 25. Feb 2008 14:46


einen Hexwert in einer Datei ändern ...
 
Liste der Anhänge anzeigen (Anzahl: 1)
Hi

Ich habe die Konfigurationsdatei die ich ändern möchte mal in einem Hexeditor geöffnet. Den blau markierten Wert (Siehe Bild im Anhang) "01" möchte ich in "00" ändern oder umgekehrt. Nun wie stelle ich das an?

ich hab da an sowas gedacht:

Delphi-Quellcode:
procedure TForm1.EButton1Click(Sender: TObject);
var
  f: file;
  value: Byte;
begin
  AssignFile(f,'C:\Dokumente und Einstellungen\th21498\Desktop\Neuer Ordner\TbInfo-PCTH0116.CFG');
  Reset(f);
  value := 0;

  //Read(f,value,18);
  // ShowMessage(intToStr(value));

  BlockWrite(f,value,18);

  CloseFile(f);
end;
Meine Versuche scheiterten aber allesamt kläglich.

Jmd eine Idee?

Vielen Dank schon mal...

Liebe Grüsse

mashutu 25. Feb 2008 15:16

Re: einen Hexwert in einer Datei ändern ...
 
Puh, bevor du an Binaerdateien Aenderungen machst solltest Du aber schon wissen, was Du tust.
Dass dem nicht so ist, sieht man an deinem Code:
Delphi-Quellcode:
procedure TForm1.EButton1Click(Sender: TObject);
var
  f: file;
  value: Byte;
begin
  AssignFile(f,'C:\Dokumente und Einstellungen\th21498\Desktop\Neuer Ordner\TbInfo-PCTH0116.CFG');
  Reset(f); //hier gibst Du keine blockgroesse an, also wird der Standard von 128 genommen
            //ist dir das bewusst? Offenbar nicht.
  value := 0;

  //Read(f,value,18);
  // ShowMessage(intToStr(value));

  BlockWrite(f,value,18); //Einmal <F1> auf das Wort blockwrite und dir sollte klar sein, was Du falsch machst.
                          //alleine in dieser Anweisung stecken drei Fehler

  CloseFile(f);
end;
Bevor ich dich jetzt mit einem herzlichen RTFM sitzen lasse, ein paar Hinweis:
1.) Du musst Die blockgroesse beim oeffnen der Datei angeben
2.) Du musst entweder auf die fragliche Stelle positionieren oder den ersten Datenblock auslesen und dann geaendert wieder (ab pos0) wegschreiben.
3.) Was glaubst Du was passiert, wenn man den Befehl
BlockWrite(f,value,18);
so wie Du ihn geschrieben hast ausfuehrt???

little_budda 25. Feb 2008 16:08

Re: einen Hexwert in einer Datei ändern ...
 
Hallo,

ich lese binäre Dateien meistens in einen Filestream ein.
Dort lassen sich die Bytes anhand der Position ansprechen und oder ändern.
Und der Stream lässt sich problemlos wieder in ein File schreiben.

:wink:

cherry 26. Feb 2008 11:38

Re: einen Hexwert in einer Datei ändern ...
 
Hallo Jungs...

Vielen Dank für die Tipps...

Ich habs jetzt so gelöst:

Delphi-Quellcode:
for i := 0 to FileList.Count - 1 do
    begin
      TRY
        FileStream := TFilestream.Create(path+FileList.Strings[i], fmOpenReadWrite);
        FileStream.Seek(18, soFromBeginning);

        if CheckBox1.Checked then buffer := 0 else buffer := 1;

        FileStream.WriteBuffer(buffer, 1);
        FileStream.Free;
        Memo1.Lines.Add(FileList.Strings[i] + '            Erfolgreich bearbeitet!');
      EXCEPT
        on e: Exception do Memo1.Lines.Add(e.Message);
      END;
    end;
Ist doch ok oder?

LG


Alle Zeitangaben in WEZ +1. Es ist jetzt 16:47 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz