Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi In eine Datei (https://www.delphipraxis.net/11617-eine-datei.html)

bixi400 10. Nov 2003 17:06


In eine Datei
 
Hi!
Wie kann ich machen das alle ausgewählten Dateien
nach einander in eine Datei Geschrieben werden?
(Auch bilder,...)

Luckie 10. Nov 2003 17:08

Re: In eine Datei
 
Hämg sie alle aneinander.

bixi400 10. Nov 2003 17:08

Re: In eine Datei
 
Womit?

Luckie 10. Nov 2003 17:14

Re: In eine Datei
 
AssignFile, Reset, Rewrite, BlockRead, BlockWrite oder
FileOpen, FileSeek, FileRead, FileWrite, FileClose.

himitsu 10. Nov 2003 17:41

Re: In eine Datei
 
Was Luckie meint, geht auch mit einem netten DOS-Befehl:
Code:
Copy "Datei.1" + "Datei.2" + "Datei.3" "Ziel.Datei"

{oder}

Copy "Datei.1" + "Datei.2" "Ziel.Datei"
Copy "Ziel.Datei" + "Datei.3" "Ziel.Datei"
Copy "Ziel.Datei" + "Datei.4" "Ziel.Datei"
in einer *.bat oder *.cmd (cmd für Win NT/2000/XP...)


Da du aber die Dateien bestimmt wieder zerlegen oder auf einzelne Dateien zugreifen willst, solltest du noch etwas mit in die kombinierte Datei aufnehmen. (z.B. Dateigrössen)
Delphi-Quellcode:
Datei 1 - Dateigrösse (4 Byte - Integer)
Datei 1 - Daten
Datei 2 - Dateigrösse (4 Byte - Integer)
Datei 2 - Daten
...
Falls es nötig ist, kann'st noch ein Tag zu Kennzeichnung einfügen.
Delphi-Quellcode:
'Dateibeginn'
Datei 1 - Dateigrösse (4 Byte - Integer)
Datei 1 - Daten
'Dateibeginn'
Datei 2 - Dateigrösse (4 Byte - Integer)
Datei 2 - Daten
...

Luckie 10. Nov 2003 17:59

Re: In eine Datei
 
Diese Routine hängt eine Datei an eine andere dran:
Delphi-Quellcode:
function AttacheFile(StubFile, AttacheFile: string): Integer;
var
  hStubFile, hAttacheFile: THandle;
  MemBuffer: array[0..BLOCKSIZE - 1] of Byte;
  StubFileSize, AttacheFileSize, BytesRead, BytesToRead, BytesWritten,
    TotalBytesWritten: Int64;
  PercentDone, PercentDoneOld: Cardinal;
begin
  BytesRead := 1;
  TotalBytesWritten := 0;
  PercentDoneOld := 0;
  hStubFile := FileOpen(StubFile, $0001);
  if hStubFile <> INVALID_HANDLE_VALUE then
  begin
    StubFileSize := GetFileSize(pointer(StubFile));
    FileSeek(hStubFile, StubFileSize, 0);
    hAttacheFile := FileOpen(AttacheFile, 0);
    AttacheFileSize := GetFileSize(pointer(AttacheFile));
    if hAttacheFile <> INVALID_HANDLE_VALUE then
    begin
      SendMessage(hApp, EFM_FILENAME, 0, lParam(PChar(AttacheFile)));
      while TotalBytesWritten < AttacheFileSize do
      begin
        BytesToRead := CalcBytesToRead(BytesRead, AttacheFileSize);
        BytesRead := FileRead(hAttacheFile, MemBuffer, BytesToRead);
        BytesWritten := FileWrite(hStubFile, MemBuffer, BytesRead);
        TotalBytesWritten := TotalBytesWritten + BytesWritten;
        PercentDone:= (TotalBytesWritten * 100) div AttacheFileSize;
        if PercentDone <> PercentDoneOld then
        begin
          SendMessage(hApp, EFM_PROGRESS, 0, PercentDone);
          PercentDoneOld := PercentDone;
        end;
        ProcessMessages(hApp);
      end;
    end;
    FileClose(hAttacheFile);
  end;
  FileClose(hStubFile);
  SendMessage(hApp, EFM_FINISH, GetLastError(), lParam(PChar(AttacheFile)));
  result := GetLastError();
end;


Alle Zeitangaben in WEZ +1. Es ist jetzt 20:00 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