Delphi-PRAXiS
Seite 2 von 3     12 3      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Programmieren allgemein (https://www.delphipraxis.net/40-programmieren-allgemein/)
-   -   Wieder TextDatei diesmal binär (https://www.delphipraxis.net/159805-wieder-textdatei-diesmal-binaer.html)

EWeiss 13. Apr 2011 15:48

AW: Wieder TextDatei diesmal binär
 
Delphi-Quellcode:
  // Datei schreiben
  f := TFileStream.Create(MidiFile, fmOpenReadWrite);

  for IntA := 1 to CurrentByte do
    f.Write(Bytes[IntA], CurrentByte);

  f.Free;
Allerdings hab ich hier ein verständnis problem

Meine Datei wird 25KB groß dürfte aber nur etwa max 1 KB sein.
Wenn ich in die Datei schaue fällt mir auf das die Datei abhängig von IntA jedesmal
komplett neu eingefügt wird.

Was ist da falsch bei mir ?
CurrentByte sind 164.

PS:
Geht damit auch nicht
So wie es aussieht kann ich damit nur Dateien editieren die Existieren.
Oder aber ich verwende ein falsches Flag.

gruss

jfheins 13. Apr 2011 15:59

AW: Wieder TextDatei diesmal binär
 
Delphi-Quellcode:
  // Datei schreiben
  f := TFileStream.Create(MidiFile, fmOpenReadWrite); // Datei wird geöffnet, neue Inhalte werden hinten angehängt

  for IntA := 1 to CurrentByte do
    f.Write(Bytes[IntA], CurrentByte); // Wenn in dem Array tatsächlich Bytes drin sind muss als 2. Parameter sizeof(Byte) stehen!

  f.Free;

EWeiss 13. Apr 2011 16:00

AW: Wieder TextDatei diesmal binär
 
Zitat:

Zitat von jfheins (Beitrag 1094876)
Delphi-Quellcode:
  // Datei schreiben
  f := TFileStream.Create(MidiFile, fmOpenReadWrite); // Datei wird geöffnet, neue Inhalte werden hinten angehängt

  for IntA := 1 to CurrentByte do
    f.Write(Bytes[IntA], CurrentByte); // Wenn in dem Array tatsächlich Bytes drin sind muss als 2. Parameter sizeof(Byte) stehen!

  f.Free;

Danke!

Aber leider funktioniert es nicht kann nur vorhandene Dateien öffnen.

gruss

Namenloser 13. Apr 2011 16:02

AW: Wieder TextDatei diesmal binär
 
Geht auch einfacher:
Delphi-Quellcode:
  f := TFileStream.Create(MidiFile, fmOpenReadWrite);
  f.Write(Bytes[1], CurrentByte{*SizeOf(Byte)});
  f.Free;
Zitat:

Aber leider funktioniert es nicht kann nur vorhandene Dateien öffnen.
Dann musst du fmCreate angeben statt fmReadWrite.

Klaus01 13. Apr 2011 16:03

AW: Wieder TextDatei diesmal binär
 
.. versuche mal als FileMode fmCreate zum Erstellen einer neuen Datei.

Grüße
Klaus

shmia 13. Apr 2011 16:14

AW: Wieder TextDatei diesmal binär
 
1.) Bei einem FileStream sollte man ReadBuffer und WriteBuffer anstelle von Read und Write verwerden.
2.) Datenstrukturen schreibt man nicht Byte für Byte, sondern in einem Rutsch.
Delphi-Quellcode:
type
  TMidiHeader = record .... end;
var
midiheader : TMidiHeader;

f := TFileStream.Create(MidiFilename, fmCreate);
f.WriteBuffer(midiheader, sizeof(midiheader));
....
f.Free;

EWeiss 13. Apr 2011 16:23

AW: Wieder TextDatei diesmal binär
 
Zitat:

Zitat von shmia (Beitrag 1094881)
1.) Bei einem FileStream sollte man ReadBuffer und WriteBuffer anstelle von Read und Write verwerden.
2.) Datenstrukturen schreibt man nicht Byte für Byte, sondern in einem Rutsch.
Delphi-Quellcode:
type
  TMidiHeader = record .... end;
var
midiheader : TMidiHeader;

f := TFileStream.Create(MidiFilename, fmCreate);
f.WriteBuffer(midiheader, sizeof(midiheader));
....
f.Free;

Ich habe keinen MidiHeader als record deklariert das ist bei mir Hardgecoded.

NamenLozer ;)
Delphi-Quellcode:
  f := TFileStream.Create(MidiFile, fmCreate or fmOpenReadWrite);
  f.Write(Bytes[1], CurrentByte);
  f.Free;
Das wars funktioniert jetzt so wie es soll.
Na ja die Tonhöhe noch nicht aber das ist ein anderes problem.

gruss

Aphton 13. Apr 2011 16:56

AW: Wieder TextDatei diesmal binär
 
[OT]
Zitat:

Zitat von ConnorMcLeod (Beitrag 1094865)
TEXT-Datei BINÄR beschreiben? Bin das nur ich oder sieht da noch jemand einen Widerspruch?

*Facepalm

Was für ein übles Missverständniss. Ich halt das kaum noch aus, soetwas zu lesen...
Also deiner Meinung nach wird TEXT nicht binär gespeichert? Werden also die einzelnen Buchstaben auf die Magnetplatten draufgekritzelt? -.-

Was macht es für einen Unterschied, wie ich folgendes speichere:
'A' (Char) = 65 (Dezimal) = $41 (Hexadezimal) = 01000001 (Binär) = 101 (Oktal)

Das ist nur eine Darstellungsform. Letzendlich landet alles in Form von Einsen und Nullen auf der Platte!

Keep that in mind and stop making that very same mistake
[/OT]

ConnorMcLeod 14. Apr 2011 09:47

AW: Wieder TextDatei diesmal binär
 
Cool down...
Mir ging es darum, daß es für jeden der beiden Fälle spezifische Datentypen und Vorgehensweisen gibt.
Bei Deinem famosen Wissen wird Dir das ja nicht neu sein.
Wir programmieren in Delphi und sollten daher auch dessen Werkzeuge verwenden.
End of transmission.

Luckie 14. Apr 2011 09:54

AW: Wieder TextDatei diesmal binär
 
Zitat:

Zitat von Aphton (Beitrag 1094891)
Das ist nur eine Darstellungsform. Letzendlich landet alles in Form von Einsen und Nullen auf der Platte!

Und um das zu vervollständigen: Wie diese Einsen und Nullen dann interpretiert werden ist Sache der Software.

@EWeiss: dann definiere dir doch einen entsprechenden Record.


Alle Zeitangaben in WEZ +1. Es ist jetzt 07:06 Uhr.
Seite 2 von 3     12 3      

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