Einzelnen Beitrag anzeigen

Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
43.328 Beiträge
 
Delphi 12 Athens
 
#2

Re: Datei in Streams zerstückeln

  Alt 25. Mär 2007, 19:08
Delphi-Quellcode:
fs := TFileStream.Create(FileName, fmOpenRead or fmShareDenyWrite);
try
  BlockSize := 30*1024*1024;
  i := 0;
  while i < fs.Size do
  begin
    SetLength(S, BlockSize);
    //fs.Position := i;
    i2 := fs.Read(S[1], BlockSize);
    SetLength(S, i2);
    Inc(i, i2);

    // hier bekommst du in S jeweils maximal 30 MB-Teilstücke

  end;
finally
  fs.Free;
end;
du kannst auch sowas machen wie "gib mir Block mit Nummer":
Delphi-Quellcode:
BlockNummer := X;

fs := TFileStream.Create(FileName, fmOpenRead or fmShareDenyWrite);
try
  BlockSize := 30*1024*1024;
  SetLength(Result, BlockSize);
  fs.Position := BlockNummer * BlockSize;
  i2 := fs.Read(Result[1], BlockSize);
  SetLength(Result, i2);

  // hier bekommst du in S jeweils den X-ten Block mit maximal 30 MB

finally
  fs.Free;
end;

// oder auch erst hier (wäre gut für 'ne Funktion)

Und zum zusammensetzen mußt du dann nur alle Teilstücker nacheinander wieder mit fs.Write in einen Stream reinschreiben.

PS: oder such mal nach Hier im Forum suchenFileSplittern, die machen ja sozusagen genau das Gleiche (nur halt mit 'nem anderem Zielformat der Teilstücke.

Aber warum will man eine sehr große Datei in vielen INIs speichern? (ich dank mal dafür gibt es besser geeignete Formate)
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests
  Mit Zitat antworten Zitat