Newsgroup: it.comp.lang.delphi
Titolo: Problema nella ricerca di file

all'inizio di una routine di ricerca di file .mp3 ho quest'istruzione:
    FindFirst('*.mp3', faArchive+faReadOnly+faHidden+faSysFile,SR);//file
quando la eseguo a run-time mi da EAccessViolatio all'indirizzo 413101EBC
nel modulo VCL40.BPL
Se al posto di '*.mp3' ci metto '.mp3' non mi da errore ma non trova nulla.
Di file mp3da trovare ce ne sono.
Potete aiutarmi? grazie
-----
Ciao da Ska-Man
akira_sendo[at]
libero.it
Togli NO SPAM per le risposte via e-mail
-----
La prima regola di internet:
Mai fare i conti senza l'hoster

Hai provato a inserire un path valido? Ossia prima di "*.mp3" dovresti
inserire una destinazione tipo "c:\documenti\*.mp3"

 inserire una destinazione tipo "c:\documenti\*.mp3"
si, ma il comportamento è alquanto strano. Se eseguo la funzione 
passo-passo (con F8)  va tutto bene, ma se eseguo senza il passo-passo 
mi genera l'errore.
La funzione in pratica trova gli mp3 e scorpora artista e titolo se sono 
scritti nella forma "artista - titolo.mp3".
La funzione è:
//--------------
        While Found=0 Do
        begin
             if (sr.Name<>'') then
                begin
                     for i:=1 to (length(
sr.name
)-4) do
                         begin
                              setlength(d,i);
                              d[i]:=sr.Name[i];
                         end;
                     sr.Name:=d;
                     i:=1;
                     repeat
 
SetLength(FormPrincipale.NomeTracce[Numero].Artista,(Length(FormPrincipale.NomeTracce[Numero].Artista)+1));
 
FormPrincipale.NomeTracce[Numero].Artista[i]:=sr.Name[i];
                           inc(i)
                     until ((sr.Name[i]=' ') and (sr.Name[i+1]='-'));
                     i:=i+3;
                     c:=1;
                     repeat
 
SetLength(FormPrincipale.NomeTracce[Numero].Titolo,(Length(FormPrincipale.NomeTracce[Numero].Titolo)+1));
 
FormPrincipale.NomeTracce[Numero].Titolo[c]:=sr.Name[i];
                           inc(i);
                           inc(c);
                     until (sr.Name[i]='');
                     if formprincipale.checkbox1.Checked=true then
                        begin
 
d:=uppercase(FormPrincipale.NomeTracce[Numero].Titolo);
                          FormPrincipale.NomeTracce[Numero].Titolo[1]:=d[1];
                          for n:=2 to 
length(FormPrincipale.NomeTracce[1].Titolo) do
                              if 
FormPrincipale.NomeTracce[Numero].Titolo[n-1]=' ' then 
FormPrincipale.NomeTracce[Numero].Titolo[n]:=d[n];
 
d:=uppercase(FormPrincipale.NomeTracce[Numero].Artista);
 
FormPrincipale.NomeTracce[Numero].Artista[1]:=d[1];
                          for n:=2 to 
length(FormPrincipale.NomeTracce[Numero].Artista) do
                              if 
FormPrincipale.NomeTracce[Numero].Artista[n-1]=' ' then 
FormPrincipale.NomeTracce[Numero].Artista[n]:=d[n];
                        end;
                     Inc(Numero);
                end;
                Found:=FindNext(SR);
//----------------------
Ciao e grazie a chiunque mi aiuterà

Nella mia piccola libreria di funzioni ho trovato questa che forse ti potrà
essere utile. Legge tutte le dll ma si può facilmente sostituire con mp3.
procedure ListDLLInFolder(Folder :string; Sub :Boolean; FileList
:TStringList;
  NameValue :boolean);
var
  Handle :THANDLE;
  FindData :WIN32_FIND_DATA;
  Dir :string;
  procedure CheckIfDll;
  begin
    if UpperCase(ExtractFileExt(FindData.cFileName)) = '.DLL' then
      if NameValue then
        FileList.Add(string(FindData.cFileName) + '=' + Dir +
FindData.cFileName)
      else
        FileList.Add(Dir + FindData.cFileName);
  end;
begin
  if FileList = nil then
    Exit;
  Dir := CheckDir(Folder);
  Handle := FindFirstFile(PChar(Dir + '*.*'), FindData);
  if not (Handle = INVALID_HANDLE_VALUE) then
    begin
      CheckIfDll;
      while FindNextFile(Handle, FindData) do
        begin
          if Sub then
            begin
              if FindData.cFileName[0] <> '.' then
                if (FindData.dwFileAttributes and FILE_ATTRIBUTE_DIRECTORY)
=
                  FILE_ATTRIBUTE_DIRECTORY then
                  ListDLLInFolder(Dir +
                    FindData.cFileName, Sub, FileList, NameValue)
                else
                  CheckIfDll;
            end
          else
            CheckIfDll;
        end;
    end;
  Windows.FindClose(Handle);
end;