Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Programmieren allgemein (https://www.delphipraxis.net/40-programmieren-allgemein/)
-   -   Datei Binär schreiben/updaten (https://www.delphipraxis.net/161111-datei-binaer-schreiben-updaten.html)

schwa226 17. Jun 2011 09:01

Datei Binär schreiben/updaten
 
Hallo!

Ich komme irgendwie nicht drauf. Ich möchte Stückchenweise eine WAV Datei abspeichern.
Der Header bleibt ja fast gleich (bis halt auf SampleSize usw.). Nach dem Header kommen die Daten und da möchte ich halt immer neue Daten anhängen.

Somit bei jedem Datenblock muss der Header überschrieben werden und der neue Datenblock hinten angehängt werden. Ich möchte nicht jedesmal das ganze File in einen MemoryStream laden sondern nur den Header updaten und die neuen Daten anhängen.

Geht das irgendwie?

Den Header der Wav Datei habe ich im Internet gefunden:
Delphi-Quellcode:
type
  { WAV file header data }
  TWAVRecord = record
    { RIFF file header }
    RIFFHeader: array [0..3] of AnsiChar;                   { Must be "RIFF" }
    FileSize: Integer;                          { Must be "RealFileSize - 8" }
    WAVEHeader: array [0..3] of AnsiChar;                   { Must be "WAVE" }
    { Format information }
    FormatHeader: array [0..3] of AnsiChar;                 { Must be "fmt " }
    FormatSize: Integer;                                       { Format size }
    FormatID: Word;                                       { Format type code }
    ChannelNumber: Word;                                { Number of channels }
    SampleRate: Integer;                                  { Sample rate (hz) }
    BytesPerSecond: Integer;                                  { Bytes/second }
    BlockAlign: Word;                                      { Block alignment }
    BitsPerSample: Word;                                       { Bits/sample }
    DataHeader: array [0..3] of AnsiChar;                    { Can be "data" }
    SampleNumber: Integer;                    { Number of samples (optional) }
  end;

himitsu 17. Jun 2011 09:03

AW: Datei Binär schreiben/updaten
 
TFileStream und via {Stream}.Position, bzw. {Stream}.Seek zur nötigen Position springen.

PS: die Integers sind eigentlich LongWords

schwa226 17. Jun 2011 09:09

AW: Datei Binär schreiben/updaten
 
Muss ich mit TFileStream nicht zuerst die ganze Datei einlesen und dann neu abspeichern?
Will ja nur neue Pakete anhängen und die alten sollen so bleiben wie sie sind.

Die Integer werde ich noch auf Unsigned umstellen!

himitsu 17. Jun 2011 09:18

AW: Datei Binär schreiben/updaten
 
TMemoryStream ... alles läuft im Arbeitsspeicher (Memory) ab, also muß man erstmal alles dort reinladen.

TFileStream ... alles läuft direkt in der Datei ab (eigentlich mehr WindowsFileCache, ls direkt auf dem Datenträger, weil der Delphi-Filestream nunmal so eingestellt).
Da werden nur die zu ändernden Teile von Windows in den FileCache geladen, falls nötig, und sonst bleibt alles auf der Platte ... du mußt jedenfalls nichts machen.

schwa226 17. Jun 2011 09:31

AW: Datei Binär schreiben/updaten
 
Danke für die Hilfe!


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