Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi Arbeiten mit Dateien (https://www.delphipraxis.net/1140-arbeiten-mit-dateien.html)

lordcroc 23. Okt 2002 12:55


Arbeiten mit Dateien
 
Liste der Anhänge anzeigen (Anzahl: 1)
als attachment habe ich meien code bei gefügt wenn ich den verwende bekomme ich einen Fehler bei readbuffer vielleicht kann mir jemand helfen!

Christian Seehase 23. Okt 2002 13:40

Moin Lordroc,

mach' mal aus Deinem .Read(RW_BUFFER,... ein .Read(RW_BUFFER[1],...

Das könnte helfen.

lordcroc 23. Okt 2002 14:41

weiß nicht pb das was bringt

procedure Tmp3v10.ReadBuffer (FileName: pchar);
var
Mp3File: TFileStream;
begin
Mp3File:= TFileStream.create (FileName, fmOpenReadWrite);
Mp3File.Seek (-128, soFromEnd);
Mp3File.Read (RW_Buffer, 128);
mp3File.Free;
end

damit will ich ja auf einen schlag 128 bytes einlesen!
wenn ich doch

Mp3File.Read (RW_Buffer[], 128);
schreibe greife ich doch auf einzelne elemente des buuffers zu oder irre ich mich!

Christian Seehase 23. Okt 2002 15:38

Moin Lordroc,

ja, in diesem Falle irrst Du ;-)

Durch den Zusatz [1] gibst Du an ab welcher Stelle Du den Buffer ansprechen willst. Die Anzahl der zu lesenden Zeichen wird ja als zweiter Parameter übergeben.

Lässt Du das [1] weg, wird die falsche Adresse angesprochen, und Dein Programm läuft auf einen Fehler auf.

lordcroc 23. Okt 2002 18:33

Liste der Anhänge anzeigen (Anzahl: 1)
Ich hab es versucht aber es funktioniert nicht es muß vielleicht noch einen anderen Fehler geben. :( :( :( :( :( er sagt mir immer AccessVailationerror oder so ähnlich.

Christian Seehase 23. Okt 2002 18:51

Moin Lordroc,

erst einmal 'tschulligung, in Deinem Programm muss es RW_BUFFER[0] heissen, da Du ja das Array bei 0 beginnen lässt :oops:
Das war's allerdings nicht.
Der Fehler tritt in BufferToTag auf (ich hab's mit ReadTag probiert).

Es fehlt eine Initialisierung der Feldern _Title, _Artist usw. die als string deklariert sind. Du sprichst in der Methode BufferToTag mit dem Index Bereiche an, die noch nicht existieren, da die Länge dieser Stringfelder 0 ist.

Am Besten fügst Du noch den Konstruktor hinzu, und initialisierst dort die Felder, auf die mögliche Länge, oder Du deklarierst die Felder als Shortstring, also mit Längenangabe.

lordcroc 23. Okt 2002 23:32

Liste der Anhänge anzeigen (Anzahl: 1)
ich habe es ausprobiert es war aber nicht der einzige grund! ich hab eine class deklariert da wollte er nicht mal diese variablen initialisieren ich musste draus ein object machen! Das lesen funktioniert jetzt!! :hello: :D :) :D :) :D
Aber das schreiben nicht er schreibt nix rein in die datei. ich habe buffer überwacht, dort standen die neusten daten aber in die datei wurde nicht geschrieben vielleicht kannst du mir ja helfen!

Daniel 24. Okt 2002 07:59

Hallo Croco,

Zitat:

Zitat von lordcroc
Ich hab eine class deklariert da wollte er nicht mal diese variablen initialisieren ich musste draus ein object machen!

Das ist auch kein Wunder. Die Klassendeklaration ist erstmal nicht viel mehr als die Bau-Anleitung für ein Objekt. Erst das Objekt selber ist ein funktionierendes "Ding", welches alle die Möglchkeiten bietet, die Du Dir in Deiner Klassen-Definition angegeben hast.

d3g 24. Okt 2002 11:25

Zitat:

Zitat von Daniel
Hallo Croco,

Zitat:

Zitat von lordcroc
Ich hab eine class deklariert da wollte er nicht mal diese variablen initialisieren ich musste draus ein object machen!

Das ist auch kein Wunder. Die Klassendeklaration ist erstmal nicht viel mehr als die Bau-Anleitung für ein Objekt. Erst das Objekt selber ist ein funktionierendes "Ding", welches alle die Möglchkeiten bietet, die Du Dir in Deiner Klassen-Definition angegeben hast.

Ich glaube lordcroc meint es eher so, dass er einer Deklaration type TSomething = class so umformen musste, dass dabei type TSomething = object heraus kommt.

@lordcroc: Das dürfte daran liegen, dass du keinen Kostruktor und Destruktor eingebaut hast. objects sollte man nicht mehr benutzen, sie sind nur zur Abwärtskompatiblität da. Baue deine Klasse so um:

Code:
type
  TSomething = class(TObject)
    { hier dein Kram }
    constructor Create();
    destructor Destroy();
  end;

// ...

constructor TSomething.Create();
begin
  inherited Create();
end;

destructor TSomething.Destroy();
begin
  inherited Destroy();
end;
Du kannst diene Objekte dann mit aTSomethingInstanceVariable := TSomething.Create() erstellen und mit aTSomethingInstanceVariable.Free() entfernen.

MfG,
d3g

Christian Seehase 24. Okt 2002 12:31

Moin Lordroc,

das mit der class Deklaration war schon völlig in Ordnung.

Hier so der abschliessende Kommentar in der Hilfe zu object:
Zitat:

Zitat von Delphi Hilfe
Objekttypen werden nur aus Gründen der Abwärtskompatibilität unterstützt und sollten in neuen Anwendungen nicht mehr verwendet werden.

Wenn Du nur class schreibst wird angenommen, dass Du class(TObject) gemeint hast. Soweit ist also alles gut.
Um sich das Leben zu vereinfachen, kannst Du übrigens StringOfChar für die Initialisierung der Strings verwenden, dann hast Du einen besseren Überblick über die Länge.

Code:
[b]type[/b]
  TMp3v10 = [b]class[/b]
            [b]private[/b]
              [color=#000080]// Weitere private Deklarationen[/color]
            [b]public[/b]
              [color=#000080]// Weitere public Deklarationen[/color]
              [b]constructor[/b] Create;
             [b]end[/b];

[b]implementation[/b]

[b]constructor[/b] TMp3v10.Create;
[b]begin[/b]
  [b]inherited[/b] Create;
  [color=#000080]// und hier die weiteren Initialisierungen[/color]
  [color=#000080]// z.B.[/color]
  _Title := StringOfChar(#32,30);
[b]end[/b];
Was mir noch aufgefallen ist:
In der Methode IsTag kommt als erstes ein ReadBuffer. Du überschreibst also schon mal wieder die gerade erzeugten Daten.

Probleme beim Schreiben hatte ich allerdings nicht.

[EDIT]Kommt davon wenn man so lange in der Antwort Maske steht :mrgreen: [/EDIT]


Alle Zeitangaben in WEZ +1. Es ist jetzt 23:19 Uhr.
Seite 1 von 2  1 2      

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