![]() |
Append und Binär-Dateien
Hi
Ich habe hier etliche kleine wav-Dateien, die ich in einer festgelegten Reihenfolge aneinanderreihen möchte. Eine Prozedur, die zwei Quell- in eine neue Zieldatei schreibt habe ich. Diese arbeitet aber viel zu langsam, da zwei temporäre Dateien jeweils als Quelle/Ziel gewählt werden und immer überschrieben werden. Gibt es einen Befehl wie append, der eine Binärdatei an eine andere anhängt, oder weiß jemand eine Optimierungsmöglichkeit für meine Prozedur?
Delphi-Quellcode:
procedure kopieren(datei1,datei2, ziel : string);
type puffer = array [1..60000] of byte; var file1, file2, file3 : file; pufzeiger : ^puffer; anzahl_bytes : longint; begin assign(file1, datei1); assign(file2, datei2); assign(file3, ziel); reset(file1); reset(file2); rewrite(file3); new(pufzeiger); while not eof(file1) do begin blockread(file1, pufzeiger^, sizeof(pufzeiger^), anzahl_bytes); blockwrite(file3, pufzeiger^, anzahl_bytes); end; while not eof(file2) do begin blockread(file2, pufzeiger^, sizeof(pufzeiger^), anzahl_bytes); blockwrite(file3, pufzeiger^, anzahl_bytes); end; dispose(pufzeiger); close(file1); close(file2); close(file3); end; |
Re: Append und Binär-Dateien
Zitat:
Folgende Procedure kopiert binäre Dateien aneinander (falls das Ziel schon exisitiert, wird angehängt):
Delphi-Quellcode:
procedure InternalConcatFiles(const DstFile,SrcFile: string);
var SrcStream,DstStream: TFileStream; begin SrcStream := TFileStream.Create(SrcFile,fmOpenRead or fmShareDenyWrite); DstStream := nil; try if not FileExists(DstFile) then begin DstStream := TFileStream.Create(DstFile,fmCreate); end else begin DstStream := TFileStream.Create(DstFile,fmOpenWrite); DstStream.Position := DstStream.Size; end; DstStream.CopyFrom(SrcStream, SrcStream.Size); // copy data finally SrcStream.Free; DstStream.Free; end; end; |
Re: Append und Binär-Dateien
Das mit den Dateien klappt schon, ich habe die vorher mit dem DragonUnpacker aus einem Spiel ausgepackt und will das nun neu packen.
Gibt es eine Möglichkeit die Prozedur mit FreePascal zu kompilieren, oder muss ich Delphi installieren? |
Re: Append und Binär-Dateien
Zitat:
|
Re: Append und Binär-Dateien
FPC konnte es auch mit Delphi-Unterstützung nicht kompilieren, aber zum Glück gibt es die c't :D
Danke für die Prozedur, jetzt werde ich nur noch etwas über Datei-/Verzeichnisoperationen lesen, damit ich nicht tausende InternalConcatFiles()-Zeilen im Code habe ;) |
Re: Append und Binär-Dateien
Append für BInärdateien gibt es so nicht, aber du kannst per Seek(f,Filesize(f)); den Datei-Zeiger ans Ende setzen (genauso wie Append es auch tut) die Datei muss dafür natürlich vorher geöffnet sein :)
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 15:27 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz