Entwickler-Ecke

Dateizugriff - Dateien zusammenkopieren


hpburner - So 29.06.03 18:02
Titel: Dateien zusammenkopieren
Hallo
Ich mehrere Datein übereinander kopieren ähnlich der msdos funktion Copy /b file1+file3 = output.file

dazu benutze ich folgende funktion:

Delphi-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:
    FileList     :  ARRAY[1..5OF STRING = ('1.k''2.k''3.k''4.k''5.k');
    CombinedFile =  'Combined.DAT';

procedure TForm1.Rebuild;
VAR
    i       :  INTEGER;
    s       :  ARRAY[1..5OF STRING;
    size    :  INTEGER;
    Stream  :  TMemoryStream;

begin
  FOR i := Low(FileList) TO High(FileList) DO
  BEGIN
    // Load files into strings
    IF   FileExists(FileList[i])
    THEN BEGIN
      Stream := TMemoryStream.Create;
      TRY
        Stream.LoadFromFile(FileList[i]);
        SetLength(s[i], Stream.Size);
        Stream.Read(s[i][1], Stream.Size)
      FINALLY
        Stream.Free
      END

    END
    ELSE s[i] := '';
  END;
  // Save strings to single binary file
  DeleteFile(CombinedFile);
  Stream := TMemoryStream.Create;
  TRY
    FOR i := Low(s) TO High(s) DO
    BEGIN
      size := LENGTH(s[i]);
      Stream.Write(size, SizeOf(size));
      Stream.Write(s[i][1], size);
    END;

    Stream.SaveToFile(CombinedFile)
  FINALLY
    Stream.Free
  END;
  end;


nur hat die combined.dat for jeder neuen Datei ein 0100 0000 ?!
Aber wieso schreibt die prozedur das darein? kann ich auch irgendwie Dynamische Arrays benutzen in die Dann eine textdatei geladen wird mit den dateien die übereinander kopiert werden sollen ? :oops:


Moderiert von user profile icontommie-lie: Code- durch Delphi-Tags ersetzt


Andreas Pfau - Sa 05.07.03 20:41

Hallo,

ich glaube, der kopiert die Physikalische Adresse der Daten mit. Schreib' statt:

Quelltext
1:
Stream.Write(s[i][1], size);                    

mal

Quelltext
1:
Stream.Write(pointer(s[i])^, size);                    


Ich glaube, das müsste funzen. Das gleiche halt auch mit der Read-Routine tun machen und so...