Fórum Como procurar arquivio em todos os drives de CD #275280

03/04/2005

0

Turma.. Tenho um exe que será gravado na mãquina do usuário, porém o programa sõ funcionará com o cd do programa no drive. Peguei um script que me devolve a letra do drive de cd e fiz as verificações, porém se a pessoa tiver 2 drives de cd ele só lê o primeiro.

Seria então só o cara trocar o cd de drive, porém aqui emc asa mesmo tem 2 drives mas um não lê direito e dá erro. Outras pessoas podem ter o mesmo problema, por isso gostaria q o programa procurasse o arquivo xxxx.bla em quanquer das unidades de cd..


Segue abaixo o script q consegui..


//Script que devolve a unidade de cd_rom
Function CDROMDrive: Char;
Var
drivemap, mask: DWORD;
i: Integer;
root: String;
Begin
Result := #0;
root := ´A:\´;
drivemap := GetLogicalDrives;
mask := 1;
For i:= 1 To 32 Do
Begin
If (mask and drivemap) <> 0 Then
If GetDriveType( PChar(root) ) = DRIVE_CDROM Then
Begin
Result := root[1];
Break;
End;
mask := mask shl 1;
Inc( root[1] );
End;
End;


// Script de verificação de existência de arquivo
disco2:
if not FileExists(CDROMDrive+´:\xxxxx.bla´) then
begin
case MessageDlg(´O cd inserido não é !´+chr(13)+chr(13)+ ´Clique em Ok para continuar ou em Cancel para Sair do programa´, mtinformation, [mbOk,mbCancel], 0) of
mrOk : goto disco2;
mrCancel : Application.Terminate;
end;
end;


O que devo fazer¿


Zenner

Zenner

Responder

Posts

29/10/2005

Marciojustino

Bom, o que eu consegui foi o seguinte, vc ainda pode filtrar mais tipos de arquivos, não consegui encontrar todos existentes.... então, lá vai


procedure TFDataCD.btSearchClick(Sender: TObject);
var
basePath: string;
dir: string;
sr: TSearchRec;
begin
dir := ´D:\´;
basePath := ´*.*´;
BuscarArquivos(dir, basePath, sr);
end;


procedure TFDataCD.BuscarArquivos(aDrive, aBasePath: string; sr: TSearchRec);
var
oldDrive: string;
begin
if ( findfirst(aDrive + aBasePath, faAnyFile, sr) = 0 ) then begin
repeat
if (sr.Name <> ´.´) and (sr.Name <> ´..´) then begin
if (sr.Attr in [faDirectory,17,19,33]) then begin
oldDrive := aDrive;
aDrive := aDrive + sr.Name + ´\´;
BuscarArquivos(aDrive, aBasePath, sr);
aDrive := oldDrive;
end
else
Memo1.Lines.Add(sr.Name);
end;
until findnext(sr) <> 0;
end;
findclose(sr);
end;


Responder

Gostei + 0

Utilizamos cookies para fornecer uma melhor experiência para nossos usuários, consulte nossa política de privacidade.

Aceitar