Zitat von
SirThornberry:
Wenn 0 zurück gegeben wird hat es geklappt. Die Hilfe sagt
Zitat:
The function result is the actual number of bytes read, which may be less than Count.
Was soviel heißt dass, das result der function die differenz zwischen zu lesenden bytes und gelesenen bytes zurück gibt.
Das sehe ich nicht so:
Zitat:
Das Rückgabewert der Funktion ist die tatsächlich gelesene Anzahl an Bytes, welche auch kleiner sein kann. als die Anzahl, die gelesen werden soll.
Wird also 0 zurückgegeben, dann wurde gar nichts gelesen wie _Ben_ schon richtig erkannt hat. Ich arbeite gerade an dem Problem.
So, habe jetzt was:
Delphi-Quellcode:
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;
Bei dieser Datei sind die letzten drei Bytes: $0000 $006E $0000.