![]() |
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!
|
Moin Lordroc,
mach' mal aus Deinem .Read(RW_BUFFER,... ein .Read(RW_BUFFER[1],... Das könnte helfen. |
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! |
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. |
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.
|
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. |
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! |
Hallo Croco,
Zitat:
|
Zitat:
@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:
Du kannst diene Objekte dann mit aTSomethingInstanceVariable := TSomething.Create() erstellen und mit aTSomethingInstanceVariable.Free() entfernen.
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; MfG, d3g |
Moin Lordroc,
das mit der class Deklaration war schon völlig in Ordnung. Hier so der abschliessende Kommentar in der Hilfe zu object: Zitat:
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:
Was mir noch aufgefallen ist:
[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]; 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 12:11 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