Autor Beitrag
hpburner
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 20



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

dazu benutze ich folgende funktion:
ausblenden volle Höhe 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 997



BeitragVerfasst: Sa 05.07.03 20:41 
Hallo,

ich glaube, der kopiert die Physikalische Adresse der Daten mit. Schreib' statt:
ausblenden Quelltext
1:
Stream.Write(s[i][1], size);					

mal
ausblenden 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...

_________________
Life is a bad adventure, but the graphic is really good!