Autor Beitrag
patrick
ontopic starontopic starontopic starontopic starontopic starofftopic starofftopic starofftopic star
Beiträge: 1481

WIN2k, WIN XP
D6 Personal, D2005 PE
BeitragVerfasst: Mi 30.04.03 16:40 
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

_________________
Patrick
im zweifelsfall immer das richtige tun!!!
O'rallY
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 563



BeitragVerfasst: 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.

_________________
.oO'rallY
Linux is like a tipi: No gates, no windows and a gnu-eating apache inside...


Zuletzt bearbeitet von O'rallY am Mi 30.04.03 18:02, insgesamt 1-mal bearbeitet
O'rallY
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 563



BeitragVerfasst: Mi 30.04.03 18:00 
ausblenden volle Höhe 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;

_________________
.oO'rallY
Linux is like a tipi: No gates, no windows and a gnu-eating apache inside...
patrick Threadstarter
ontopic starontopic starontopic starontopic starontopic starofftopic starofftopic starofftopic star
Beiträge: 1481

WIN2k, WIN XP
D6 Personal, D2005 PE
BeitragVerfasst: 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)

_________________
Patrick
im zweifelsfall immer das richtige tun!!!
O'rallY
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 563



BeitragVerfasst: 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: .

_________________
.oO'rallY
Linux is like a tipi: No gates, no windows and a gnu-eating apache inside...
Luckie
Ehemaliges Mitglied
Erhaltene Danke: 1



BeitragVerfasst: Mi 30.04.03 21:05 
ausblenden 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 563



BeitragVerfasst: 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:

_________________
.oO'rallY
Linux is like a tipi: No gates, no windows and a gnu-eating apache inside...
Luckie
Ehemaliges Mitglied
Erhaltene Danke: 1



BeitragVerfasst: Do 01.05.03 13:04 
O'rallY hat folgendes geschrieben:
Aber gibt es diese Funktion auch für Integer?

Sicher:
ausblenden Quelltext
1:
Format('%0.3d', [i])					

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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 563



BeitragVerfasst: 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: .

_________________
.oO'rallY
Linux is like a tipi: No gates, no windows and a gnu-eating apache inside...
Luckie
Ehemaliges Mitglied
Erhaltene Danke: 1



BeitragVerfasst: 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: