AGB  ·  Datenschutz  ·  Impressum  







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

Datei binär einlesen

Ein Thema von nailor · begonnen am 23. Dez 2002 · letzter Beitrag vom 29. Dez 2002
Antwort Antwort
Seite 2 von 2     12   
Benutzerbild von nailor
nailor

Registriert seit: 12. Dez 2002
Ort: Karlsruhe
1.989 Beiträge
 
#11
  Alt 23. Dez 2002, 16:56
Ok, wenn ich wissen will, ob meine Ver- Entschlüsselung geht, dann ist mir jede Checksumme zu ungenau. Also vergleich ich den Kram Byte für Byte.
...Never mind...
Michael N.
http://nailor.devzero.de/code/sharpmath/testing/ --- Tests, Feedback, Anregungen, ... aller Art sehr willkommen!
::: don't try so hard - it'll happen for a reason :::
  Mit Zitat antworten Zitat
Benutzerbild von nailor
nailor

Registriert seit: 12. Dez 2002
Ort: Karlsruhe
1.989 Beiträge
 
#12
  Alt 26. Dez 2002, 00:23
Delphi-Quellcode:
//Dateivergleich
procedure TForm1.Button8Click(Sender: TObject);
var Rein, Raus: TFileStream;
    ReinKB, RausKB: array[0..1023] of byte;
    x,y,i:integer;
begin

for i := 0 to 1023 do
  begin
    ReinKB[i] := 0;
    RausKB[i] := 0;
  end;

try
  Rein := TFileStream.Create(LabeledEdit1.Text, fmOpenRead);
except
  ShowMessage('Fehler beim Öffnen der Dateien! #002a');
  Exit;
end;

try
  Raus := TFileStream.Create(LabeledEdit2.Text, fmOpenRead);
except
  Rein.Free;
  ShowMessage('Fehler beim Öffnen der Dateien! #002b');
  Exit;
end;

repeat
  begin x := Rein.Read(ReinKB, 1024);
    y := Raus.Read(RausKB, x);
    if x <> y then
      begin
        ShowMessage('Unterschiedlich - Dateivergleich negativ, Dateilängen falsch! #003');
        Rein.Free;
        Raus.Free;
        Exit;
      end;
    for i := 0 to 1023 do
      if ReinKB[i] <> RausKB[i] then
        begin
          ShowMessage('Unterschiedlich - Dateivergleich negativ, Abweichung festgestellt! #004');
          Rein.Free;
          Raus.Free;
          Exit;
        end;
  end;
until x = 0;

ShowMessage('Gleich - Dateivergleich postiv');
Rein.Free;
Raus.Free;
end;
Wenn der jetzt an #002a oder #002b rausspringt, kann das andere Gründe haben, als dass die Datei von einem anderen Programm geöffnet ist? Also zu groß... oder so was
Michael N.
http://nailor.devzero.de/code/sharpmath/testing/ --- Tests, Feedback, Anregungen, ... aller Art sehr willkommen!
::: don't try so hard - it'll happen for a reason :::
  Mit Zitat antworten Zitat
Benutzerbild von nailor
nailor

Registriert seit: 12. Dez 2002
Ort: Karlsruhe
1.989 Beiträge
 
#13
  Alt 26. Dez 2002, 01:23
Mir ist grade was aufgefallen an dem Code. Wenn die zweite Datei länger ist als die erste, können die immer noch als gleich getestet werden. Wird behoben. Aber meine eigentliche Frage bleibt.
Michael N.
http://nailor.devzero.de/code/sharpmath/testing/ --- Tests, Feedback, Anregungen, ... aller Art sehr willkommen!
::: don't try so hard - it'll happen for a reason :::
  Mit Zitat antworten Zitat
Christian Seehase
(Co-Admin)

Registriert seit: 29. Mai 2002
Ort: Hamburg
11.117 Beiträge
 
Delphi 11 Alexandria
 
#14
  Alt 27. Dez 2002, 04:28
Moin Nailor,

wenn Du vor der Prüfschleife einfach rein.size und raus.size vergleichst, und dann zu dem Ergebnis kommst, dass die Werte ungleich sind, können die Dateien schon mal nicht gleich sein.
Dazu musst Du nicht erste eine der beiden durchlesen.

Ausserdem fehlt noch der try/finally Block der garantiert, dass die belegten Resourcen wieder freigegeben werden.

Wenn Du die beiden Buffer nicht als array of Byte sondern schlicht als Strings deklarierst, und jeweils auf 1024 würdest Du Dir auch die zweite Schleife einsparen können. Für den letzten Vergleich (es werden weniger als 1024 Zeichen gelesen) müsste dann allerdings verkürzt verglichen werden, also z.B. mit Copy(sRaus,1,ReadByte) <> Copy(sRein,1,ReadByte).

Was mir jetzt noch fehlt:
Welche eigentliche Frage meinst Du?
Tschüss Chris
Die drei Feinde des Programmierers: Sonne, Frischluft und dieses unerträgliche Gebrüll der Vögel.
Der Klügere gibt solange nach bis er der Dumme ist
  Mit Zitat antworten Zitat
Benutzerbild von nailor
nailor

Registriert seit: 12. Dez 2002
Ort: Karlsruhe
1.989 Beiträge
 
#15
  Alt 28. Dez 2002, 18:36
Wenn der jetzt an #002a oder #002b rausspringt, kann das andere Gründe haben, als dass die Datei von einem anderen Programm geöffnet ist? Also zu groß... oder so was

----

zb. ram...
Michael N.
http://nailor.devzero.de/code/sharpmath/testing/ --- Tests, Feedback, Anregungen, ... aller Art sehr willkommen!
::: don't try so hard - it'll happen for a reason :::
  Mit Zitat antworten Zitat
Christian Seehase
(Co-Admin)

Registriert seit: 29. Mai 2002
Ort: Hamburg
11.117 Beiträge
 
Delphi 11 Alexandria
 
#16
  Alt 29. Dez 2002, 05:15
Moin Nailor,

das dürfte an den genannten Stellen eigentlich nur passieren, wenn die Datei schon anderweitig geöffnet ist, oder nicht existiert.

Probier doch mal statt Deines ShowMessage folgende Variante:

ShowMessage(SysErrorMessage(GetLastError)); Dann sollte Dir die passende Windowsfehlermeldung präsentiert werden.
Da TFileStream intern auf der API CreateFile basiert sollte das eine sinnvolle Meldung bringen.

Oder aber, Du schreibst einfach in den except Abschnitt, unmittelbar vor das exit noch eine Zeile in der raise; steht. Dann wird die zuletzt ausgelöste Exception noch einmal ausgelöst.
Tschüss Chris
Die drei Feinde des Programmierers: Sonne, Frischluft und dieses unerträgliche Gebrüll der Vögel.
Der Klügere gibt solange nach bis er der Dumme ist
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 2 von 2     12   


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 13:45 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