![]() |
Problem mit FileRead
Hi,
ich hab hier ein ganz banales Problem. Ich schaff's nicht Daten aus ner Datei einzulesen...
Delphi-Quellcode:
Das Problem ist, dass FileRead nichts macht...
procedure TForm1.Button1Click(Sender: TObject);
var iReturn: Integer; iFileHandle: Integer; TagVersion: array[0..2] of byte; begin iFileHandle := FileOpen('C:\test.mp3', fmOpenRead or fmShareDenyNone); Application.MessageBox(PAnsiChar(IntToStr(iFileHandle)), 'Rückgabe FileOpen:'); iReturn := FileSeek(iFileHandle, 0, 2); Application.MessageBox(PAnsiChar(IntToStr(iReturn)), 'Rückgabe FileSeek:'); iReturn := FileRead(iFileHandle, TagVersion, SizeOf(TagVersion)); Application.MessageBox(PAnsiChar(IntToStr(iReturn)), 'Rückgabe FileRead:'); FileClose(iFileHandle); end; Wenn ich das richtig verstanden habe sollte die Funktion die Anzahl der eingelesenen Bytes zurück geben. Die ist aber immer 0! Kann mir einer sagen was ich falsch mach? MfG, Ben |
Re: Problem mit FileRead
Wenn 0 zurück gegeben wird hat es geklappt. Die Hilfe sagt
Zitat:
|
Re: Problem mit FileRead
Zitat:
Zitat:
So, habe jetzt was:
Delphi-Quellcode:
Bei dieser Datei sind die letzten drei Bytes: $0000 $006E $0000.
function GetTagVersion(Filename: String; var TagInfo: TtagInfo): DWORD;
var hFile: THandle; dummy: TTagInfo; begin SetLastError(0); hFile := FileOpen(Filename, fmOpenRead or fmShareDenyNone); if hFile <> 0 then begin // Muss Offset nicht drei sein? // Du willst doch die letzten drei Byte auslesen, also musst du // vom Dateiende drei Bytes zurückgehen und ab da lesen. // (Ist nur so eine Vermutung, korrigier mich, wenn ich falsch // liegen sollte.) if FileSeek(hFile, 3, 2) <> -1 then begin FileRead(hFile, dummy, sizeof(TTagInfo)); end; FileClose(hFile); end; TagInfo := dummy; Result := GetLastError(); end; function TagInfoToHexStr(TagInfo: TTagInfo): String; var s: String; i: Integer; begin for i := 0 to 2 do begin s := s + IntToHex(TagInfo[i], 4)+ ' '; end; result := s; end; procedure TForm1.Button1Click(Sender: TObject); var TagInfo: TTagInfo; dwReturn: DWORD; begin dwReturn := GetTagVersion('G:\MP3s\Beatles\Beatles - Blue Jay Way.mp3', TagInfo); if dwReturn = 0 then begin ShowMessage(TagInfoToStr(TagInfo)); end else ShowMessage(SysErrorMessage(dwReturn)); end; |
Re: Problem mit FileRead
Hi,
Ja, beim FileSeek hab ich natürlich blödsinn geschrieben. Das kann so ja nicht gehen. Ich will erst mal einlesen um was für ne ID3-Version es sich handelt. Wenn es sich um V1.0 handelt sollte an Offset -128 vom Dateiende 'TAG' stehen. Dann 30 Byte für Titel, 30 Byte für Interpret etc. Hab ich geändert. Ist aber eigentlich mal nebensächlich. Ich wär schon froh wenn ich mit FileRead überhaupt irgendwas einlesen könnte... Ich hab jetzt mal den Datentyp des FileHandles auf THandle geändert wie du's vorgemacht hast. Bringt leider nichts aber ist vielleicht sauberer. Liegt's vielleicht an meinem Byte-Array dass FielRead da nichts reinschreibt? Überegeb ich das nicht richtig? (Stichwort: By Value/ Reference) Aber selbst wenn FileRead mit ner Kopie arbeiten würde und ich desswegen in meinem Array keine veränderung feststellen könnte sollte doch die Funktion zurückgeben dass sie x Byte gelesen hat! Was für ein Datentyp steckt denn bei dir hinter TTagInfo? MfG, Ben |
Re: Problem mit FileRead
Hallo nochmal!
Hab's jetzt! Wie ich grad geschrieben hab: der Offset den ich brauch liegt 128 Bytes VOR dem Dateiende... Also:
Delphi-Quellcode:
Ich hab die ganze Zeit 128 geschrieben und bin somit im Nirvana gelandet! :wall:
FileSeek(hFile, -128, 2);
Jetzt würde mich bloß noch interessieren warum bei mir FileRead in dem Fall gar nichts liest, Luckie aber ein Ergebniss bekommt... Naja, wenigstens hauts jetzt hin... Ciao, Ben |
Re: Problem mit FileRead
Zitat:
Delphi-Quellcode:
type
TTagInfo = array [0..2] of Byte; Zitat:
|
Re: Problem mit FileRead
Oh, vielleicht sollte ich nächstes mal die hilfe genauer lesen und nicht falsch übersetzen :oops:
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 03:44 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