AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Probleme mit BlockRead / BlockWrite

Ein Thema von JBJHJM · begonnen am 18. Dez 2009 · letzter Beitrag vom 19. Dez 2009
Antwort Antwort
Seite 1 von 2  1 2      
JBJHJM

Registriert seit: 16. Jan 2009
88 Beiträge
 
Delphi 2005 Personal
 
#1

Probleme mit BlockRead / BlockWrite

  Alt 18. Dez 2009, 22:02
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);
  Mit Zitat antworten Zitat
Benutzerbild von Luckie
Luckie

Registriert seit: 29. Mai 2002
37.621 Beiträge
 
Delphi 2006 Professional
 
#2

Re: Probleme mit BlockRead / BlockWrite

  Alt 18. Dez 2009, 22:13
Zeig doch mal deinen Code.
Michael
Ein Teil meines Codes würde euch verunsichern.
  Mit Zitat antworten Zitat
JBJHJM

Registriert seit: 16. Jan 2009
88 Beiträge
 
Delphi 2005 Personal
 
#3

Re: Probleme mit BlockRead / BlockWrite

  Alt 18. Dez 2009, 22:17
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.
  Mit Zitat antworten Zitat
Benutzerbild von Luckie
Luckie

Registriert seit: 29. Mai 2002
37.621 Beiträge
 
Delphi 2006 Professional
 
#4

Re: Probleme mit BlockRead / BlockWrite

  Alt 18. Dez 2009, 22:29
Das sieht fast nach einem Unicode Problem aus.
Michael
Ein Teil meines Codes würde euch verunsichern.
  Mit Zitat antworten Zitat
Benutzerbild von Luckie
Luckie

Registriert seit: 29. Mai 2002
37.621 Beiträge
 
Delphi 2006 Professional
 
#5

Re: Probleme mit BlockRead / BlockWrite

  Alt 18. Dez 2009, 22:48
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?
Michael
Ein Teil meines Codes würde euch verunsichern.
  Mit Zitat antworten Zitat
JBJHJM

Registriert seit: 16. Jan 2009
88 Beiträge
 
Delphi 2005 Personal
 
#6

Re: Probleme mit BlockRead / BlockWrite

  Alt 18. Dez 2009, 23:01
Ich bekomme ne Meldung - Geschriebene Bytes: 10
Danach eine Zugriffsrechtsverletzung - EAccessViolation Adresse 00405C28, Lesen von Adresse FFFFFFF8.
  Mit Zitat antworten Zitat
Benutzerbild von Luckie
Luckie

Registriert seit: 29. Mai 2002
37.621 Beiträge
 
Delphi 2006 Professional
 
#7

Re: Probleme mit BlockRead / BlockWrite

  Alt 18. Dez 2009, 23:30
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.
Michael
Ein Teil meines Codes würde euch verunsichern.
  Mit Zitat antworten Zitat
JBJHJM

Registriert seit: 16. Jan 2009
88 Beiträge
 
Delphi 2005 Personal
 
#8

Re: Probleme mit BlockRead / BlockWrite

  Alt 18. Dez 2009, 23:36
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.
  Mit Zitat antworten Zitat
Benutzerbild von Luckie
Luckie

Registriert seit: 29. Mai 2002
37.621 Beiträge
 
Delphi 2006 Professional
 
#9

Re: Probleme mit BlockRead / BlockWrite

  Alt 18. Dez 2009, 23:42
Öffne die Datei mal mit Notepad.

Aber für reine Textdateien würde ich sowieso Delphi-Referenz durchsuchenWriteln usw. nehmen.
Michael
Ein Teil meines Codes würde euch verunsichern.
  Mit Zitat antworten Zitat
JBJHJM

Registriert seit: 16. Jan 2009
88 Beiträge
 
Delphi 2005 Personal
 
#10

Re: Probleme mit BlockRead / BlockWrite

  Alt 19. Dez 2009, 00:22
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?
Angehängte Dateien
Dateityp: txt test_129.txt (1,3 KB, 9x aufgerufen)
  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 14:20 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