AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Sprachen und Entwicklungsumgebungen Object-Pascal / Delphi-Language Delphi Howto: Datei byteweise lesen und schreiben
Thema durchsuchen
Ansicht
Themen-Optionen

Howto: Datei byteweise lesen und schreiben

Ein Thema von PASST · begonnen am 24. Aug 2006 · letzter Beitrag vom 24. Aug 2006
Antwort Antwort
Seite 1 von 2  1 2      
PASST

Registriert seit: 30. Mär 2005
Ort: Krefeld
325 Beiträge
 
Delphi 7 Enterprise
 
#1

Howto: Datei byteweise lesen und schreiben

  Alt 24. Aug 2006, 10:53
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
  Mit Zitat antworten Zitat
Der_Unwissende

Registriert seit: 13. Dez 2003
Ort: Berlin
1.756 Beiträge
 
#2

Re: Howto: Datei byteweise lesen und schreiben

  Alt 24. Aug 2006, 11:07
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
  Mit Zitat antworten Zitat
PASST

Registriert seit: 30. Mär 2005
Ort: Krefeld
325 Beiträge
 
Delphi 7 Enterprise
 
#3

Re: Howto: Datei byteweise lesen und schreiben

  Alt 24. Aug 2006, 11:37
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
  Mit Zitat antworten Zitat
kolbaschedder

Registriert seit: 24. Aug 2006
Ort: Schwäbisch Gmünd
55 Beiträge
 
Delphi 2006 Professional
 
#4

Re: Howto: Datei byteweise lesen und schreiben

  Alt 24. Aug 2006, 11:38
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;
  Mit Zitat antworten Zitat
Benutzerbild von DGL-luke
DGL-luke

Registriert seit: 1. Apr 2005
Ort: Bad Tölz
4.149 Beiträge
 
Delphi 2006 Professional
 
#5

Re: Howto: Datei byteweise lesen und schreiben

  Alt 24. Aug 2006, 11:43
mit streams würd so gehen:

Delphi-Quellcode:
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;
Ich hoffe, die with...do und try..finally..end syntaxelemente sind dir geläufig.

EDIT: varibale entfernt, filemode geändert...
Lukas Erlacher
Suche Grafiktablett. Spenden/Gebrauchtangebote willkommen.
Gotteskrieger gesucht!
For it is the chief characteristic of the religion of science that it works. - Isaac Asimov, Foundation I, Buch 1
  Mit Zitat antworten Zitat
Der_Unwissende

Registriert seit: 13. Dez 2003
Ort: Berlin
1.756 Beiträge
 
#6

Re: Howto: Datei byteweise lesen und schreiben

  Alt 24. Aug 2006, 11:50
Zitat von DGL-luke:
mit streams würd so gehen:

Delphi-Quellcode:
var FS: TFileStream;
begin
  with TFileStream.Create(AFileName, fmOpenWrite) do //öffnen
Ich hoffe, die with...do .. syntaxelemente sind dir geläufig.
  Mit Zitat antworten Zitat
Benutzerbild von DGL-luke
DGL-luke

Registriert seit: 1. Apr 2005
Ort: Bad Tölz
4.149 Beiträge
 
Delphi 2006 Professional
 
#7

Re: Howto: Datei byteweise lesen und schreiben

  Alt 24. Aug 2006, 11:55
Der Compiler macht das schon weg

EDIT: hat er
Lukas Erlacher
Suche Grafiktablett. Spenden/Gebrauchtangebote willkommen.
Gotteskrieger gesucht!
For it is the chief characteristic of the religion of science that it works. - Isaac Asimov, Foundation I, Buch 1
  Mit Zitat antworten Zitat
PASST

Registriert seit: 30. Mär 2005
Ort: Krefeld
325 Beiträge
 
Delphi 7 Enterprise
 
#8

Re: Howto: Datei byteweise lesen und schreiben

  Alt 24. Aug 2006, 13:38
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;
  Mit Zitat antworten Zitat
Benutzerbild von inherited
inherited

Registriert seit: 19. Dez 2005
Ort: Rosdorf
2.022 Beiträge
 
Turbo Delphi für Win32
 
#9

Re: Howto: Datei byteweise lesen und schreiben

  Alt 24. Aug 2006, 13:44
Zitat von DGL-luke:
  with TFileStream.Create(AFileName, fmOpenWrite) do //öffnen
*hüstel*, müsste es nicht fmCreate oder fmOpenReadWrite sein, weil fmOpenWrite den bisherigen inhalt doch komplett ersetzt?
Nikolai Wyderka

SWIM SWIM HUNGRY!
Neuer Blog: hier!
  Mit Zitat antworten Zitat
Benutzerbild von DGL-luke
DGL-luke

Registriert seit: 1. Apr 2005
Ort: Bad Tölz
4.149 Beiträge
 
Delphi 2006 Professional
 
#10

Re: Howto: Datei byteweise lesen und schreiben

  Alt 24. Aug 2006, 13:48
Sicher? Das wäre ja... katastrophal...

Zitat:
fmOpenWrite
Die Datei wird ausschließlich zum Schreiben geöffnet. Beim Schreiben in die Datei wird der aktuelle Inhalt vollständig ersetzt.
Ja... tatsächlich...

wirs sofort korrigiert. Das ist aber nicht sehr sprechend...

fmOpenWriteAndDeleteEveryThingWhenIReallyWrite wäre passender
Lukas Erlacher
Suche Grafiktablett. Spenden/Gebrauchtangebote willkommen.
Gotteskrieger gesucht!
For it is the chief characteristic of the religion of science that it works. - Isaac Asimov, Foundation I, Buch 1
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 12:27 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