Entwickler-Ecke
Dateizugriff - Dateien "splitten"
patrick - Mi 30.04.03 16:40
Titel: Dateien "splitten"
hi zusammen,
ich möchte eine große datei in mehrere kleine dateien splitten.
und anschließend später wieder zusammensetzten.
kann mir jemand helfen und sagen wie das funktioniert?
THX
O'rallY - Mi 30.04.03 18:00
Erstmal ein paar Tipps zum selber erarbeiten, der nächste Post ist dann der Code:
-Benutze Streams, da kannst du Dateien partiell ab einer bestimmten Position einlesen und kannst auch die Länge bestimmen, die eingelesen werden soll.
-Übergib als Parameter die Anzahl der Splitter. Damit kannst du dann einfach die Größe der einzelnen Splitter erechnen.
-Anhand der Namen der Splitter kannst du die Position kennzeichnen, z.B. testdatei_splitter1.spl.
O'rallY - Mi 30.04.03 18:00
Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23: 24: 25: 26: 27: 28: 29: 30: 31: 32: 33: 34: 35: 36: 37: 38: 39: 40: 41: 42: 43: 44: 45: 46: 47: 48: 49: 50: 51: 52:
| function SplitFile(FileName : TFileName; SizeofFiles : Integer) : integer; var i : Word; fs, sStream: TFileStream; SplitFileName: String; begin
fs := TFileStream.Create(FileName, fmOpenRead or fmShareDenyWrite); try for i := 1 to Trunc(fs.Size / SizeofFiles) + 1 do begin SplitFileName := ChangeFileExt(FileName, '.'+ FormatFloat('000', i)); sStream := TFileStream.Create(SplitFileName, fmCreate or fmShareExclusive); try if fs.Size - fs.Position < SizeofFiles then SizeofFiles := fs.Size - fs.Position; sStream.CopyFrom(fs, SizeofFiles); finally sStream.Free; end; Result := i; end; finally fs.Free; end;
end;
function CombineFiles(FileName, CombinedFileName : TFileName) : Boolean; var i: integer; fs, sStream: TFileStream; filenameOrg: String; begin i := 1; fs := TFileStream.Create(CombinedFileName, fmCreate or fmShareExclusive); try while FileExists(FileName) do begin sStream := TFileStream.Create(FileName, fmOpenRead or fmShareDenyWrite); try fs.CopyFrom(sStream, 0); finally sStream.Free; end; Inc(i); FileName := ChangeFileExt(FileName, '.'+ FormatFloat('000', i)); end; finally fs.Free; end; end; |
patrick - Mi 30.04.03 19:46
vielen dank für die schnelle antwort O'rallY
PS deine Signatur find ich super :D (wolt ich dir immer schon mal sagen)
O'rallY - Mi 30.04.03 19:55
| patrick hat folgendes geschrieben: |
vielen dank für die schnelle antwort O'rallY
|
Aber immer gerne doch :D.
| patrick hat folgendes geschrieben: |
PS deine Signatur find ich super :D (wolt ich dir immer schon mal sagen) |
Vielen Dank, ich auch :mrgreen: .
Delete - Mi 30.04.03 21:05
Quelltext
1:
| SplitFileName := ChangeFileExt(FileName, '.'+ FormatFloat('000', i)); |
Rechnest du damit, dass die Laufvariable i der for-Schleife zu einer Fließkommazahl wird wärend der Schleife? :roll:
O'rallY - Do 01.05.03 11:10
Um ehrlich zu sein, habe ich den Code nicht selbst geschrieben (Staub auf mein Haupt, ja ich bin faul :wink:). Ich glaub der ist vom SwissDelphiCenter. Aber gibt es diese Funktion auch für Integer?
Warum bist du eigentlich immer so streng? Da kriegt man gleich ein schlechtes Gewissen wenn du postest. :mrgreen:
Delete - Do 01.05.03 13:04
| O'rallY hat folgendes geschrieben: |
| Aber gibt es diese Funktion auch für Integer? |
Sicher:
| Zitat: |
Warum bist du eigentlich immer so streng?
|
Weil sich alle Welt darüber beschwert, das MS Software so verbuggt ist. Und genau da fängt es an. Immer sauber programmieren, auch bei Kleinigkeiten.
| Zitat: |
Da kriegt man gleich ein schlechtes Gewissen wenn du postest. :mrgreen: |
Gut so. :mrgreen:
O'rallY - Do 01.05.03 20:16
Ich glaube du hast mich missverstanden. Ich bin absolut deiner Meinung, ich bin auch froh, dass du mich auf sowas hinweißt.
Ich meinte eigentlich, dass du deine Posts mit mehr :) :wink: :D oder :mrgreen: . :mrgreen: Einfach ein bisschen freundlicher schreiben. So etwa:
| Zitat: |
Liebster O'rallY. Ich verstehe nicht ganz warum du FormatFloat verwendest. Ich möchte dich freundlichst darauf hinweisen, dass es sich um einen floatspezifischen Befehl handelt und da du Integer benutzt, ist er hier eher unangebracht.
Ich bitte um dein Verständnis.
Danke vielmals!
Der liebe Luckie
|
Ok? Kannst es ja mal für die Zukunft zu Herzen nehmen. :mrgreen: :wink: .
Delete - Do 01.05.03 20:20
Ich will ja nicht mit dir flirten. Und außerdem gefällt mir er hier: :roll: so gut. :mrgreen:
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2026 by Christian Stelzmann Alle Rechte vorbehalten.
Alle Beiträge stammen von dritten Personen und dürfen geltendes Recht nicht verletzen.
Entwickler-Ecke und die zugehörigen Webseiten distanzieren sich ausdrücklich von Fremdinhalten jeglicher Art!