При использовании данной функции с приводом, в котором нету диска, выходит ошибка windows о том, что отсутствует диск. Как сделать, чтобы это окно не выходило?
uses
Windows;
const
DriveNameLen= 4;
VolumeNameLen= 12;
FileSysNameLen= 128;
var
Drive: string[DriveNameLen];
VolumeName: string[VolumeNameLen];
SerialNumber, MaxFileNameLen, FileSysFlags: DWord;
FileSysName: string[FileSysNameLen];
begin
Drive:= 'C:\'+#0;
// можно использовать, чтобы убедиться, что этот драйв - CDROM:
WriteLn('is the drive CDROM? ',GetDriveType(@Drive[1])=DRIVE_CDROM);
// теперь определяем, есть ли в нем диск (и много еще чего))
WriteLn('Is there disk in it? ',
GetVolumeInformation(
@Drive[1],
@VolumeName[1], VolumeNameLen,
@SerialNumber,
MaxFileNameLen,
FileSysFlags,
@FileSysName[1], FileSysNameLen
)
);
readln
end.
Чтобы не спускаться на такой низкий уровень, можно просто отключить показ критических сообщений системы перед вызовом FileExists, а потом - восстановить прежний режим:
uses windows, sysutils;, должно сработать. По крайней мере, на официальном форуме поддержки Embarcadero давали именно такой рецепт.
begin
OldMode := SetErrorMode (SEM_FAILCRITICALERRORS);
if FileExists ('a:\test.txt') then writeln ('ok') else writeln ('no');
SetErrorMode (OldMode);
end.
Вот! отключить показ, то, что надо, спасибо!
> Drive:= 'C:\'+#0;
Дельфа сама всем строкам ноль дорисовывает, не надо это делать руками.
[offtop]
Да действительно, я увидел в конце ноль, потому что глобальные переменные инициализируются нулём, а так там ноль не добавляется.
Viagra For Sale In Canada
Acheter Kamagra Ligne
Cialis In Der Apotheke Kaufen
Site De Vente De Cialis
Viagra Prescription Medicale