Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi ReUniteFile - trennen (https://www.delphipraxis.net/138649-reunitefile-trennen.html)

Johannes013 14. Aug 2009 06:50


ReUniteFile - trennen
 
Morgen, :)

ich habe mir diese Procedure im Delphi-Treff angesehen:

Delphi-Quellcode:
procedure ReUniteFile(const Files: TStrings; const FileName: string);
var
  f1, f2: TFileStream;
  i: integer;
begin
f1 := TFileStream.Create(Filename, fmCreate or fmShareDenyWrite);
  try
  for i:=0 to Files.Count-1 do
    begin
      f2 := TFileStream.Create(Files[i], fmOpenRead or fmShareDenyNone);
      try
        f1.CopyFrom(f2, 0);
      finally
        f2.Free;
      end;
    end;
  finally
    f1.Free;
  end;
end;
Sie wird hierdurch aufgerufen:

Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
var
  sl: TStringlist;
begin
  sl := TStringlist.Create;
  try
    sl.Add('c:\Bild.bmp.001');
    sl.Add('c:\Bild.bmp.002');
    ReUniteFile(sl, 'c:\NeuesBild.bmp');
  finally
    sl.Free;
  end;
end;

ich weiß aber nicht, wie ich diese Dateien wieder trennen kann.... :roll:
Wahrscheinlich verstehe ich das nicht, kann mir da einer helfen?

mfg Johannes013

mkinzler 14. Aug 2009 06:52

Re: ReUniteFile - trennen
 
Du musst wissen, wie groß die Dateien sind, welche du da reinschreibst.

Johannes013 14. Aug 2009 06:54

Re: ReUniteFile - trennen
 
und soll ich sie dann splittern?

himitsu 14. Aug 2009 06:59

Re: ReUniteFile - trennen
 
Zitat:

und soll ich sie dann splittern?
ähhhhh :gruebel:
ja?

Speichere doch einfach die Dateigrößen mit, dann weißt du beim Auslesen, wieviel der Daten zur aktuellen Datei gehören.
Es sei denn die Dateien haben feste/bekannte Größen und du speicherst die Größen direkt im QuellCode.
Delphi-Quellcode:
procedure ReUniteFile(const Files: TStrings; const FileName: string);
var
  f1, f2: TFileStream;
  i, i2: Integer;
begin
  f1 := TFileStream.Create(Filename, fmCreate or fmShareDenyWrite);
  try
    for i:=0 to Files.Count-1 do
      begin
        f2 := TFileStream.Create(Files[i], fmOpenRead or fmShareDenyNone);
        try
          i2 := f2.Size;
          f1.WriteBuffer(i, SizeOf(i));
          f1.CopyFrom(f2, 0);
        finally
          f2.Free;
        end;
      end;
  finally
    f1.Free;
  end;
end;

Johannes013 14. Aug 2009 19:44

Re: ReUniteFile - trennen
 
ähhh, ich weiß nicht wirklich, wie ich die Dateien dann auslesen soll. :!:

mkinzler 14. Aug 2009 19:50

Re: ReUniteFile - trennen
 
Was ist den die Umkehrung von Write?

DeddyH 14. Aug 2009 19:52

Re: ReUniteFile - trennen
 
Etirw? :lol:

mkinzler 14. Aug 2009 19:58

Re: ReUniteFile - trennen
 
Genau :stupid: Jetzt musst du ihm diese Funktion nur noch implementieren

jfheins 14. Aug 2009 20:34

Re: ReUniteFile - trennen
 
Nichts leichter als das
Delphi-Quellcode:
TStreamExt = class helper for TStream
function Etirw(var Buffer; Count: Longint): Longint;
end;

implementation

function Etirw(var Buffer; Count: Longint): Longint;
begin
  Result := Read(Buffer,Count);
end;
:mrgreen:

DeddyH 14. Aug 2009 20:35

Re: ReUniteFile - trennen
 
Das geht auch noch anders (für ältere Delphi-Versionen), aber die Mühe mache ich mir jetzt nicht :lol:


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