Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi Probleme mit BlockRead / BlockWrite (https://www.delphipraxis.net/144889-probleme-mit-blockread-blockwrite.html)

JBJHJM 18. Dez 2009 22:02


Probleme mit BlockRead / BlockWrite
 
Wenn ich BlockRead/BlockWrite mit Zahlen benutze, klappts einwandfrei.
Wenn ich es mit strings versuche, klappts gar nicht. Beim wiedereinlesen des Strings gibts fehlermeldungen, und mit dem Hexeditor betrachtet sieht auch der in die Datei geschriebene String ziemlich merkwürdig aus.

Könnte bitte einer von euch mir kurze Beispielfunktionen zeigen, mit der mit Hilfe von BlockRead/BlockWrite ein genau 64 Zeichen langer String geschrieben bzw. gelesen werden kann?

Vielen Dank!



Ergänzung: Bei mir siehts so aus:

Der Code
E3B0C44298FC1C149AFBF4C8996FB92427AE41E4649B934CA4 95991B7852B855

wird zu [hexadezimal]
00 07 b3 48 00 18 ff 13 00 11 b3 48 00 04 ff 00
00 03 00 ca 01 70 af 48 00 20 31 d3 00 20 31 00
03 00 ca 01 70 af 48 00 20 31 d3 00 20 31 d3 00
34 ff 13 00 4f af 48 00 70 af 48 00 00 00 00 00

Sieht für mich schon irgendwie falsch aus, zu viele 00-Blöcke drin?!

Der Befehl dafür war einfach BlockWrite(file,string,64);

Luckie 18. Dez 2009 22:13

Re: Probleme mit BlockRead / BlockWrite
 
Zeig doch mal deinen Code.

JBJHJM 18. Dez 2009 22:17

Re: Probleme mit BlockRead / BlockWrite
 
Habe es gerade schon geändert...

Der String (genau 64 Zeichen)
E3B0C44298FC1C149AFBF4C8996FB92427AE41E4649B934CA4 95991B7852B855

wird mit

Delphi-Quellcode:
AssignFile(file,Dateipfad);
ReWrite(file,1);
BlockWrite(file,string,64);
zu [hexadezimal]
00 07 b3 48 00 18 ff 13 00 11 b3 48 00 04 ff 00
00 03 00 ca 01 70 af 48 00 20 31 d3 00 20 31 00
03 00 ca 01 70 af 48 00 20 31 d3 00 20 31 d3 00
34 ff 13 00 4f af 48 00 70 af 48 00 00 00 00 00

Sieht für mich schon irgendwie falsch aus, zu viele 00-Blöcke drin, und auch noch so regelmäßig?!

schöneres Beispiel: der String 'Hallo ich bin es' wird zu a8 d0 4d 00 04 ff 13 00 81 fd 4d 00 20 31 d3 00.

Luckie 18. Dez 2009 22:29

Re: Probleme mit BlockRead / BlockWrite
 
Das sieht fast nach einem Unicode Problem aus.

Luckie 18. Dez 2009 22:48

Re: Probleme mit BlockRead / BlockWrite
 
Delphi-Quellcode:
var
  f: File;
  cntWritten: Integer;
  cntRead: Integer;
  buffer: Array of Byte;
  s: string = 'Mein Text.';

begin
  AssignFile(f, 'd:\test.txt');
  {$I-}
  Rewrite(f);
  if IOResult = 0 then
  begin
    BlockWrite(f, s[1], Length(s), cntWritten);
    ShowMessage('Geschrieben Bytes: '+IntToStr(cntWritten));
    CloseFile(f);
  end
  else
    ShowMessage(SysErrorMessage(GetLastError));
  {$I+}

  AssignFile(f, 'd:\test.txt');
  {$I-}
  Reset(f);
  if IOResult = 0 then
  begin
    SetLength(buffer, Length(s));
    BlockRead(f, buffer[0], Length(s), cntRead);
    ShowMessage('Gelesener Text: ' + string(buffer) + '. Gelesene Bytes: ' + IntToStr(cntRead));
    CloseFile(f);
  end
  else
    ShowMessage(SysErrorMessage(GetLastError));
  {$I+}
end.
Was kommt bei dir da raus?

JBJHJM 18. Dez 2009 23:01

Re: Probleme mit BlockRead / BlockWrite
 
Ich bekomme ne Meldung - Geschriebene Bytes: 10
Danach eine Zugriffsrechtsverletzung - EAccessViolation Adresse 00405C28, Lesen von Adresse FFFFFFF8.

Luckie 18. Dez 2009 23:30

Re: Probleme mit BlockRead / BlockWrite
 
Und du hast meinen Code nicht verändert? Und du hast ein Laufwerk, in dessen Wurzelverzeichnis du eine datei anlegen darfst?

Eine alternative wären noch Delphi-Referenz durchsuchenTFileStream oder Delphi-Referenz durchsuchenReadln und Delphi-Referenz durchsuchenWriteln.

JBJHJM 18. Dez 2009 23:36

Re: Probleme mit BlockRead / BlockWrite
 
Nein, habe nur -> Neues Projekt mit einem Formular (könnte nochmal ohne Formular probieren, aber daran sollte es wohl nicht liegen...) -> Code direkt ausgeführt (ohne prozedur/Button o.ä.). Auf D:/ habe ich auch freien Zugriff.

Ich sehe gerade, es wurde doch eine Datei erzeugt, die Fehlermeldung muss irgendwo danach gekommen sein.
Dateiinhalt ist
"M e i n T e x t .", gefolgt von einigen 100 Leerzeichen und einem Zeilenumbruch.

Luckie 18. Dez 2009 23:42

Re: Probleme mit BlockRead / BlockWrite
 
Öffne die Datei mal mit Notepad.

Aber für reine Textdateien würde ich sowieso Delphi-Referenz durchsuchenWriteln usw. nehmen.

JBJHJM 19. Dez 2009 00:22

Re: Probleme mit BlockRead / BlockWrite
 
Liste der Anhänge anzeigen (Anzahl: 1)
Habe ich gemacht. Hier ist sie nochmal als Anhang!
Das Problem ist, dass es letztendlich keine Textdatei sein wird. Der Hauptteil der Datei wird verschlüsselt sein, aber würde ich jetzt schon mit größeren verschlüsselten Daten arbeiten, wird es am Ende umso schwerer, die Fehler auszumerzen...

Was mich auch wunderte, wieso kann ich einen Block einer Datei nicht per BlockRead direkt in einem String speichern?


Alle Zeitangaben in WEZ +1. Es ist jetzt 07:41 Uhr.
Seite 1 von 2  1 2      

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