![]() |
Howto: Datei byteweise lesen und schreiben
Hi NG.
Delphi 4 (update 3) Wie kann ich in einer Datei ein bestimmtes Byte auslesen und überschreiben? Hintergrund ist, ich möchte bei einer dbase Datei an Byte 1C (der MDX-Flag) den Wert von 1 auf 0 ändern. Gruß Peter |
Re: Howto: Datei byteweise lesen und schreiben
HI,
ich bin mir nicht 100%ig sicher, aber es gibt doch bestimmt schon TStream in D4? Mit Streams kannst du genau das machen. Schau einfach mal in der OH nach TFileStream/TMemoryStream/TStream. Gruß Der Unwissende |
Re: Howto: Datei byteweise lesen und schreiben
Stimmt, damit müsste es gehen. Leider kenne ich mich mit Streams nicht so gut aus, werde wohl ein wenig suchen udn tüfteln müssen.
Jetzt habe ich aber noch eine Verständnisfrage. Ich möchte ja eine dbase Datei "manipulieren". Wenn ich mit einem TStream in Delphi die Datei an einem Byte ändern will, funktioniert das eigentlich doch so, dass ich den Stream bis zu diesem Byte lesen muss, das Byte anschließend ersetze, den Rest der Datei einlesen und wieder auf die Platte schreiben. Ist das nicht ein wenig umständlich? Gibt es nicht die Möglichkeit, genau das gewünschte Byte zu verändern, ohne das alles gelesen und alles wieder geschrieben wird? Gruß Peter |
Re: Howto: Datei byteweise lesen und schreiben
Probier'S mal mit den nativen Dateiroutinen.
Ungefähr so.
Code:
procedure writeByte;
var f : integer; buffer : byte; nOffset : integer; begin buffer := 0; nOffset := $1C; f := FileOpen('datei.xxx', fmOpenWrite); if f >= 0 then try fileSeek(f, nOffset, soFromBeginning); fileWrite(f,buffer, 1); finally fileClose(f); end; end; |
Re: Howto: Datei byteweise lesen und schreiben
mit streams würd so gehen:
Delphi-Quellcode:
Ich hoffe, die with...do und try..finally..end syntaxelemente sind dir geläufig.
procedure StreamSetByte(AFilename: string;APosition: Int64; AValue: Byte);
begin with TFileStream.Create(AFileName, fmOpenReadWrite) do //öffnen try Position := APosition; //Position "suchen" Write(AValue, sizeof(AValue)); //Schreiben finally Free; //schließen end; end; EDIT: varibale entfernt, filemode geändert... |
Re: Howto: Datei byteweise lesen und schreiben
Zitat:
|
Re: Howto: Datei byteweise lesen und schreiben
Der Compiler macht das schon weg ;)
EDIT: hat er :mrgreen: |
Re: Howto: Datei byteweise lesen und schreiben
Vielen Dank euch allen, insbesondere an kolbaschedder. Seine Lösung passt per Copy Paste :)
Ich habe es zuerst als TFilestream versucht, aber es hat nicht geklappt. Habe ich hier am Code irgendwas falsch gemacht?
Delphi-Quellcode:
var
FS: TFilestream; aFileName: String; aPosition: Longint; aValue: Byte; begin aFileName := 'datei.dbf'; aPosition := $1C; aValue := 0; with FS.Create(AFileName, fmOpenWrite) do //öffnen try Position := APosition; //Position "suchen" Write(AValue, sizeof(AValue)); //Schreiben finally Free; //schließen end; |
Re: Howto: Datei byteweise lesen und schreiben
Zitat:
|
Re: Howto: Datei byteweise lesen und schreiben
Sicher? Das wäre ja... katastrophal...
Zitat:
wirs sofort korrigiert. Das ist aber nicht sehr sprechend... fmOpenWriteAndDeleteEveryThingWhenIReallyWrite wäre passender :mrgreen: |
Alle Zeitangaben in WEZ +1. Es ist jetzt 22:18 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz