Newsgroup: it.comp.lang.delphi
Titolo: FileExists e 2000/XP

Salve a tutti
Se uso questa bellissima funzione in questo modo
FileExists( 'A:\pippo.txt' )
quando nel drive non è prsente alcun floppy, nei sistemi Win95/98 va tutto
bene perchè ottengo un valore False e posso proseguire nei miei cicli, ma
nei sistemi Win2000 e XP (ed a questo punto penso anche NT) il SO presenta
una sua maschera (indesiderata !!!) che mi invita ad inserire un floppy nel
drive.
La funzione sopra mi serve, appunto, per testare la presenza di un
determinato floppy nel drive per cui desidero essere io a visualizzare
MessageBox con i miei messaggi e non avere MessageBox di SO fra i piedi.
Esiste un altro modo per testare se nel drive esiste un floppy senza
scatenare reazioni da parte del SO in W2000, XP ed affini ?
Grazie
Phora

function DiskInDrive(Drive: Char): Boolean;
var
ErrorMode: word;
begin
{ make it upper case }
if Drive in ['a'..'z'] then Dec(Drive, $20);
{ make sure it's a letter }
if not (Drive in ['A'..'Z']) then
raise EConvertError.Create('Not a valid drive ID');
{ turn off critical errors }
ErrorMode := SetErrorMode(SEM_FailCriticalErrors);
try
{ drive 1 = a, 2 = b, 3 = c, etc. }
if DiskSize(Ord(Drive) - $40) = -1 then
Result := False
else
Result := True;
finally
{ restore old error mode }
SetErrorMode(ErrorMode);
end;
end;

a volo a volo, vedi se questa API documentata nel SDK di Winsozz fa al caso
tuo:
DeviceIoControl
Bye
A.

Bella!
Molto carina.
BaiBai
A.

Ciao David

Scritta, provata ... ed IN USO
Ti ringrazio molto.
Phora

> function DiskInDrive(Drive: Char): Boolean;
mi pare utile, che dite la metto nelle FAQ ?


Direi che potrebbe essere cosa buona e giusta.
Senti l'autore (David)
Phora

vai tranqui



non sarebbe meglio cosi :
Function DiskInDrive(Drive: Char) : Boolean;
Var ErrorMode: word;
Begin
  { make it upper case }
  UpCase(Drive);
  { make sure it's a letter }
  If NOT (Drive in ['A'..'Z'])
    Then  raise EConvertError.Create('Not a valid drive ID');
  { turn off critical errors }
  ErrorMode := SetErrorMode(SEM_FailCriticalErrors);
  Try
    { drive 1 = a, 2 = b, 3 = c, etc. }
    Result := NOT (DiskSize(Ord(Drive) - $40) = -1);
  Finally
  { restore old error mode }
  SetErrorMode(ErrorMode);
  End;
End;
Il Razziatore,
The Only Good Windows is an uninstalled Windows
-----------------------------------------------
E-MAILs : IlRazziat...@NOSPAMnetscape.net
WEB     : 
http://www.razziatore.dns2go.com/
ICQ     : 67552596

Concordo sull'UpCase, ma l'ultima parte (quella del result) č uguale.
Sintatticamente corrette entrambe, stilisticamente piů bella la tua :)

 Sintatticamente corrette entrambe, stilisticamente piů bella la tua :)
Ok, ho messo su la versione di Razziatore, visto che l'Upcase e' piu' bello
da vedere (e una possibile funzione in piu' da imparare per il lettore
occasionale :) e le espressioni booleane che evitano gli if mi sono sempre
piaciute.
--
{MSX}  -  
http://msx.rules.it
Mantenitore delle FAQ di it.comp.lang.delphi,
reperibili qui: 
http://gpi.infomedia.it/abc/delphi/FaqDelphi.txt

:)

Ho guardato le faq.
xchè negli altri casi hai messo il nome e nel mio no ? :PPPPPPPPPPPPPPPPPPP
birbante

> xchè negli altri casi hai messo il nome e nel mio no ?
:PPPPPPPPPPPPPPPPPPP
Ops dimenticato :D
Ora c'e'..


:))))))