AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Dateien aufteilen/splitten

Ein Thema von mr47 · begonnen am 4. Mär 2006 · letzter Beitrag vom 5. Mär 2006
Antwort Antwort
Benutzerbild von mr47
mr47

Registriert seit: 6. Dez 2004
Ort: Stuttgart
644 Beiträge
 
Delphi 2005 Personal
 
#1

Dateien aufteilen/splitten

  Alt 4. Mär 2006, 18:48
Hallo DPler!

Ich hab schon gesucht und nur ein Programm von Luckie gefunden. Ich will Dateien (die auch mal bis zu 2 GB groß sein können) aufsplitten. Und zwar in relativ viele Teile. Also 2GB in z.B. 100 Teile oder so. Kann mir jemand helfen? Ich weiß überhaupt nicht wie ich das angehen soll...


Ich hoffe es ist alles klar. Danke im Voraus!

mr47
  Mit Zitat antworten Zitat
Benutzerbild von SirThornberry
SirThornberry
(Moderator)

Registriert seit: 23. Sep 2003
Ort: Bockwen
12.235 Beiträge
 
Delphi 2006 Professional
 
#2

Re: Dateien aufteilen/splitten

  Alt 4. Mär 2006, 18:54
Der Ansatz ist recht einfach. Öffne die große Datei. Erstelle eine neue Datei (teil1.dat) und lese dann X Bytes aus der großen Datei und schreibe diese in die neue Datei. Nach X kopierten Bytes erstellst du die nächste Datei und kopierst dort die nächsten Teile rein. Mit TFilestream ist das recht einfach. Einfach die Methode CopyFrom nehmen und angeben wieviel Bytes kopiert werden sollen.
Jens
Mit Source ist es wie mit Kunst - Hauptsache der Künstler versteht's
  Mit Zitat antworten Zitat
Benutzerbild von mr47
mr47

Registriert seit: 6. Dez 2004
Ort: Stuttgart
644 Beiträge
 
Delphi 2005 Personal
 
#3

Re: Dateien aufteilen/splitten

  Alt 4. Mär 2006, 19:06
Hi!

Ok. Danke. Ich hab jetzt folgenden Code geschrieben (sorry für die Variablen namen). Er scheint auch zu funktionieren:
Delphi-Quellcode:
var tf: TFileStream;
    x: tFileStream;
begin
  x:=TFileStream.Create('F:\a.jpg',fmShareDenyWrite);
  tf:=TFileStream.Create('F:\1a.jpg.dat',fmCreate);
  tf.CopyFrom(x,1024);

  tf.Free;
  x.Free;

1. Nur jetzt ne blöde Frage. Wie krieg ich die Teildateien dann wieder zusammen? Steh grad auf der Leitung.
2. Wie kann ich eine Teildatei von Byte 2048 bis 3072 machen? Ich mein, wie fang ich mitten in der Datei mit dem Teilen an? Oder macht's das automatisch?
3. Was passiert wenn ich am Ende der Datei bin? Gibt's dann nicht ne AV?

mr47 und schon mal vielen Dank!



EDIT: Ok, die Fragen 2 und 3 haben sich von alleine, durch probieren erledigt. Wäre noch Frage 1! Danke
  Mit Zitat antworten Zitat
Der_Unwissende

Registriert seit: 13. Dez 2003
Ort: Berlin
1.756 Beiträge
 
#4

Re: Dateien aufteilen/splitten

  Alt 4. Mär 2006, 21:08
Hi,
eigentlich bekommst du die so ziemlich genau so zusammen, wie du sie trennst.
Du erstellst einfach eine neue Datei, setzt den Positionszeiger auf 0 und schreibst nacheinander die Dateien (in richtiger Reihenfolge) rein. Mit dem schreiben wird der Positionszeiger automatisch weiter gesetzt.
Natürlich kannst du auch noch deine eigenen Dateien erweitern. Da deine Dateien auf 4 GByte beschränkt sein dürften, kannst du einfach zwei führende Cardinals in die gesplitteten Dateien setzen, einmal die ursprüngliche Position in der Datei und dann noch die größe in Bytes, die du in diese Datei geschrieben hast. Damit hast du dann die einfache Möglichkeit, weitere Daten ranzuhängen (z.B. einen Hash um zu prüfen in wie weit die Datei konsistent ist) und gleichzeitig spielt auch die Reihenfolge in der du die Dateien einliest keine Rolle mehr.

Gruß Der Unwissende
  Mit Zitat antworten Zitat
Benutzerbild von mr47
mr47

Registriert seit: 6. Dez 2004
Ort: Stuttgart
644 Beiträge
 
Delphi 2005 Personal
 
#5

Re: Dateien aufteilen/splitten

  Alt 4. Mär 2006, 22:50
Hi! Vielen Dank erst mal.

Aaalso, das funktioniert ganz gut. Ich kann die Datei wieder zusammenfügen. Da die Dateien nummeriert sind und die auch nach dem splitten nicht mehr verändert werden, brauch ich das mit dem Cardinal in der Datei nicht.
Aber jetzt doch mal zu Frage 3, zwei Posts weiter oben. Wie stell ich am besten fest, wann die Datei am Ende ist. Bisher hab ich das mit einer While-Schleife und filestream.Size gemacht. Aber nach dem zussamenfügen fehlt unten im Bild ein kleines Eck. Das heißt der Code hat nicht richtig funktioniert. Wie kann ich die letzten Bytes, die also kleiner als eine Splitdatei sind, ermitteln?

Und dann noch eine Frage: Wie kann ich den Filestream wieder "schließen". Hab festgestellt, dass er nach dem benutzen immernoch die Dateien reserviert hat. Man kann von außen nicht drauf zugreifen... ein Filestream.Close wie beim Buffer gibt es nicht...


Danke, mr47
  Mit Zitat antworten Zitat
Benutzerbild von Luckie
Luckie

Registriert seit: 29. Mai 2002
37.621 Beiträge
 
Delphi 2006 Professional
 
#6

Re: Dateien aufteilen/splitten

  Alt 5. Mär 2006, 13:38
Die Datei wird automatisch geschlossen, wenn man den FileStream wieder freigibt.
Michael
Ein Teil meines Codes würde euch verunsichern.
  Mit Zitat antworten Zitat
Benutzerbild von mr47
mr47

Registriert seit: 6. Dez 2004
Ort: Stuttgart
644 Beiträge
 
Delphi 2005 Personal
 
#7

Re: Dateien aufteilen/splitten

  Alt 5. Mär 2006, 15:11
Ich danke dir!!!

mr47
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 18:52 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