AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Problem mit FileRead

Ein Thema von _Ben_ · begonnen am 28. Mai 2004 · letzter Beitrag vom 28. Mai 2004
Antwort Antwort
_Ben_

Registriert seit: 28. Mai 2004
4 Beiträge
 
#1

Problem mit FileRead

  Alt 28. Mai 2004, 00:51
Hi,

ich hab hier ein ganz banales Problem. Ich schaff's nicht Daten aus ner Datei einzulesen...

Delphi-Quellcode:
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;
Das Problem ist, dass FileRead nichts macht...
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
  Mit Zitat antworten Zitat
Benutzerbild von SirThornberry
SirThornberry
(Moderator)

Registriert seit: 23. Sep 2003
Ort: Bockwen
12.235 Beiträge
 
Delphi 2006 Professional
 
#2

Re: Problem mit FileRead

  Alt 28. Mai 2004, 01:08
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.
Jens
Mit Source ist es wie mit Kunst - Hauptsache der Künstler versteht's
  Mit Zitat antworten Zitat
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, 01: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
_Ben_

Registriert seit: 28. Mai 2004
4 Beiträge
 
#4

Re: Problem mit FileRead

  Alt 28. Mai 2004, 14:46
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
  Mit Zitat antworten Zitat
_Ben_

Registriert seit: 28. Mai 2004
4 Beiträge
 
#5

Re: Problem mit FileRead

  Alt 28. Mai 2004, 15:09
Hallo nochmal!

Hab's jetzt! Wie ich grad geschrieben hab: der Offset den ich brauch liegt 128 Bytes VOR dem Dateiende...
Also:
FileSeek(hFile, -128, 2); Ich hab die ganze Zeit 128 geschrieben und bin somit im Nirvana gelandet!

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
  Mit Zitat antworten Zitat
Benutzerbild von Luckie
Luckie

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

Re: Problem mit FileRead

  Alt 28. Mai 2004, 15:21
Zitat von _Ben_:
Was für ein Datentyp steckt denn bei dir hinter TTagInfo?
Ups, habe ich vergessen:
Delphi-Quellcode:
type
  TTagInfo = array [0..2] of Byte;
Zitat:
Ich hab die ganze Zeit 128 geschrieben und bin somit im Nirvana gelandet!
Mach dir nichts draus, wie du siehst habe ich den gleichen Fehler gemacht.
Michael
Ein Teil meines Codes würde euch verunsichern.
  Mit Zitat antworten Zitat
Benutzerbild von SirThornberry
SirThornberry
(Moderator)

Registriert seit: 23. Sep 2003
Ort: Bockwen
12.235 Beiträge
 
Delphi 2006 Professional
 
#7

Re: Problem mit FileRead

  Alt 28. Mai 2004, 15:40
Oh, vielleicht sollte ich nächstes mal die hilfe genauer lesen und nicht falsch übersetzen
Jens
Mit Source ist es wie mit Kunst - Hauptsache der Künstler versteht's
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 04:48 Uhr.
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