Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi Probleme mit File Of Byte/Char (https://www.delphipraxis.net/122013-probleme-mit-file-byte-char.html)

J Kadison 8. Okt 2008 08:39


Probleme mit File Of Byte/Char
 
Hallöle!
Ich hab da ein kleines Problem und zwar möchte ich Dateien verschlüsseln. Das wäre acuh nicht mein problem, aber wie bekomm ich denn die Dateien am besten eingelesen?
Ich hab zwar rausgeunden, dass ich das mit file of byte machen kann also:

Delphi-Quellcode:
var
  xy,
  m : File of Byte;
  x : integer;
begin
  Pfad := Edit1.Text;

  AssignFile(xy,pfad);
  reset(xy);

  rewrite(m,'C:\MeineDat.exe');
  reset(m);

  for x := 0 to FileSize(xy)-1 do begin

    read(xy,zz);
    write(m,zz);

  end;

  closefile(xy);
  closefile(m);
end;
Das hier ist absolut kein Problem. Ich bekommen genau die gleiche Datei.
Aber sobald ich das Ganze jetzt irgendwo zwischenspecihern möchte, geht das schief:

Delphi-Quellcode:

var
  l    : Array of Byte;
  xy,
  m    : File of Byte;
  x    : integer;
  Pfad,
  Pfad1 : String;
begin
  Pfad := Edit1.Text;
  Pfad1 := Edit2.Text;

  AssignFile(xy,pfad);
  reset(xy);

  rewrite(m,Pfad1);
  reset(m);

  SetLength(l, Filesize(xy));
  for x := 0 to FileSize(xy)-1 do begin
    read(xy,l[x]);
    // Hier hab ich noch was um den Fortschirtt anzuzeigen
  end;
  for x := 0 to Length(l) do begin
    write(m,l[x]);
    // Hier hab ich noch was um den Fortschirtt anzuzeigen
  end;
  closefile(xy);
  closefile(m);
end;

Kann mir jetzt irgendjemand sagen, wo hier der Fehler ist?
wenn ich kleine TXT dateien wähle werden die zwar noch nichtig angezeigt aber die dateigröße der beiden ist unterschiedlich. Sobald ich EXE dateien oder ähnliches nehme weichen diese verdammt arg ab und funktionieren uach nichtmehr!
Was mach ich denn Falsch
(kann ja nur ne kleinigkeit sein oder?)
Ich komm aber auch nach stundenlanger fehlersuche nicht drauf!

Kann ich das Gaze auch gleich als File of char öffnen (wenn ich dann den QT so anpasse damit es keine Fehler mehr gibt) oder kann ich deswegen auch wieder probleme mit den Dateien bekommen?

taaktaak 8. Okt 2008 08:52

Re: Probleme mit File Of Byte/Char
 
Zitat:

rewrite(m,Pfad1);
reset(m);
Was soll denn das?
Sollte das rewrite() nicht ein assignfile() sein?!

Reinhard Kern 8. Okt 2008 09:04

Re: Probleme mit File Of Byte/Char
 
Zitat:

Zitat von J Kadison
Delphi-Quellcode:
  AssignFile(xy,pfad);
  reset(xy);

  rewrite(m,Pfad1);
  reset(m);

Das dürfte eigentlich nicht ohne Fehlermeldung übersetzt werden, da der (optionale) 2. Parameter von rewrite kein String ist. Rewrite wird genauso benutzt wie reset, aber ANSTELLE von reset. Also:

Delphi-Quellcode:
  AssignFile(m,Pfad1);
  rewrite(m);
Hier wird 1 Byte zuviel geschrieben:
Delphi-Quellcode:
  for x := 0 to Length(l) do begin
Zitat:

Zitat von J Kadison
Kann ich das Gaze auch gleich als File of char öffnen (wenn ich dann den QT so anpasse damit es keine Fehler mehr gibt) oder kann ich deswegen auch wieder probleme mit den Dateien bekommen?

Besser nicht, wenn es keine Char sind - wahrscheinlich macht es aber keinen Unterschied, da Char nicht speziell behandelt werden, das ist nur beim Filetyp Text der Fall (soweit aus der Hilfe dazu was zu entnehmen ist). Ist auch zukunftssicherer, falls mal Unicode als Standard kommt.

Gruss Reinhard

J Kadison 8. Okt 2008 13:45

Re: Probleme mit File Of Byte/Char
 
Hallo Danke für die schnellen Antworten.
Bin grad leider nur auf durchmarsch.
Probiere es heute abend aus aber ihr meint, mit

Delphi-Quellcode:
var
  l    : Array of Byte;
  xy,
  m    : File of Byte;
  x    : integer;
  Pfad,
  Pfad1 : String;
begin
  Pfad := Edit1.Text;
  Pfad1 := Edit2.Text;

  AssignFile(xy,pfad);
  reset(xy);

 
  //DAS HIER IST GEÄNDERT
  AssignFile(m,Pfad1);
  rewrite(m);
  //BIS HIER

  SetLength(l, Filesize(xy));
  for x := 0 to FileSize(xy)-1 do begin
    read(xy,l[x]);
    // Hier hab ich noch was um den Fortschirtt anzuzeigen
  end;
  for x := 0 to Length(l)-1 {DAS IST AUCH GEÄNDERT} do begin
    write(m,l[x]);
    // Hier hab ich noch was um den Fortschirtt anzuzeigen
  end;
  closefile(xy);
  closefile(m);
end;
solte es gehen?! oder ist da ncoh was falsch ?

Aber kann das Length(1) zu einem größenunterschied von ~ 300KB führen?!?

J Kadison 17. Jan 2009 20:37

Re: Probleme mit File Of Byte/Char
 
Ja konnte es xD
Okay damit hat sich das Thema auch erledigt :)


Alle Zeitangaben in WEZ +1. Es ist jetzt 02:29 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