Einzelnen Beitrag anzeigen

muhael

Registriert seit: 5. Mär 2013
42 Beiträge
 
#1

Dateien zusammenfügen und später wieder Zerlegen

  Alt 5. Okt 2015, 10:34
Delphi-Version: 7
Hallo meine Lieben Delphianer!

Zu meinem Programm:
Ich habe einen Updater der von einem FTP Server die benötigten Dateien herunterlädt und speichert (IndyFTP) nun sind aber über die Zeit relativ viele und auch viele kleine Dateien Hinzugekommen.
Nun gibt es ja das Phänomen wenn man viele kleine Dateien Runterläd, kopiert o.ä. das sich der ganze Vorgang dadurch drastisch in die Länge zieht.

Meine Idee: die ganzen kleinen Dateien zu einer zusammenzufügen (Nein ich möchte bzw kann nicht Abbrevia, Zlib, Jedis oder ZipMaster verwenden da ich diese nicht installieren kann oder geschweige nach der Installation benutzen kann ). außerdem ist die kommpression bei solch kleinen Dateien viel zu gering damit das irgendwas aus macht.
Nun habe ich schon ein wenig zu Streams gelesen und ein wenig Code http://www.delphipraxis.net/154806-datei-datei-anhaengen.html gefunden.

Nun muss ich das auf meine Dateien anwenden und auch auf die Masse der Dateien. Dazu müssten eventuell noch die Dateinamen in den "Header". aber es gibt für den Updater eine Update.txt wo drin steht wie die Datei Heißt also denke nicht notwendig oder?

meine Funktion sieht z.Z so aus und meine Fragen lauten.
1.) wie muss ich die Dateien(TStrings) in den Stream einbinden?
2.) wie neben der Länge noch den Namen Speichern?
3.) wie lese ich die Daten wieder aus?

sorry wegen den Fragen ist das erste mal mit Streams

Delphi-Quellcode:
Function Writedata(Files:TStrings; Filename:string):boolean;
  Var lStream : TStream;
      lStartPos : Int64;
      lDataSize : Cardinal;
      i : Integer;
begin
  lStream := TFileStream.Create(Filename, fmCreate);
  try
    lStartPos := 0;
    lStream.Position := lStream.Position + sizeof(lDataSize);
    for i := 0 to Files.Count-1 do begin
      // Lade Dateien
      // In STream Speichern...
      lDataSize := lStream.Position - lStartPos - sizeof(lDataSize);
      lStream.Position := lStartPos;
      lStream.Write(lDataSize, sizeof(lDataSize));
      // wie die endung speichern?
    end;
    Result := true;
  except
    Result := False;
  end;
end;
LG muhael
  Mit Zitat antworten Zitat