Thema: Delphi Problem mit FileRead

Einzelnen Beitrag anzeigen

Benutzerbild von Luckie
Luckie

Registriert seit: 29. Mai 2002
37.621 Beiträge
 
Delphi 2006 Professional
 
#3

Re: Problem mit FileRead

  Alt 28. Mai 2004, 00:21
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.
Michael
Ein Teil meines Codes würde euch verunsichern.
  Mit Zitat antworten Zitat