IPB
ЛогинПароль:

 
 Ответить  Открыть новую тему 
> Функция FileExists.
сообщение
Сообщение #1


Новичок
*

Группа: Пользователи
Сообщений: 47
Пол: Мужской

Репутация: -  0  +


При использовании данной функции с приводом, в котором нету диска, выходит ошибка windows о том, что отсутствует диск. Как сделать, чтобы это окно не выходило?
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #2


Уникум
*******

Группа: Пользователи
Сообщений: 6 823
Пол: Мужской
Реальное имя: Лопáрь (Андрей)

Репутация: -  159  +


Цитата(Билли Боб @ 3.09.2011 1:38) *
При использовании данной функции с приводом, в котором нету диска, выходит ошибка windows о том, что отсутствует диск. Как сделать, чтобы это окно не выходило?

Тебе нужно использовать системный доступ к дискам, а он системозависим. Если твоя прога только для 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.


--------------------
я - ветер, я северный холодный ветер
я час расставанья, я год возвращенья домой
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #3


Гуру
*****

Группа: Пользователи
Сообщений: 1 013
Пол: Мужской
Ада: Разработчик
Embarcadero Delphi: Разработчик
Free Pascal: Разработчик

Репутация: -  627  +


Чтобы не спускаться на такой низкий уровень, можно просто отключить показ критических сообщений системы перед вызовом FileExists, а потом - восстановить прежний режим:

uses windows, sysutils;
begin
OldMode := SetErrorMode (SEM_FAILCRITICALERRORS);
if FileExists ('a:\test.txt') then writeln ('ok') else writeln ('no');
SetErrorMode (OldMode);
end.
, должно сработать. По крайней мере, на официальном форуме поддержки Embarcadero давали именно такой рецепт.
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #4


Новичок
*

Группа: Пользователи
Сообщений: 47
Пол: Мужской

Репутация: -  0  +


Вот! отключить показ, то, что надо, спасибо!
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #5


Злостный любитель
*****

Группа: Пользователи
Сообщений: 1 755
Пол: Мужской

Репутация: -  62  +


> Drive:= 'C:\'+#0;

Дельфа сама всем строкам ноль дорисовывает, не надо это делать руками.


--------------------
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #6


Уникум
*******

Группа: Пользователи
Сообщений: 6 823
Пол: Мужской
Реальное имя: Лопáрь (Андрей)

Репутация: -  159  +


Цитата(TarasBer @ 5.09.2011 10:00) *
> Drive:= 'C:\'+#0;

Дельфа сама всем строкам ноль дорисовывает, не надо это делать руками.

Я не знаю, почему ты говоришь тут (в разделе про 32-битные компиляторы) про Delphi. Для Delphi есть свой раздел.
FPC так не прикалывается (специально проверил)).

Если уж зашла речь про Delphi - немного странно мне, если она правда так поступает. Надеюсь, это отключается.


--------------------
я - ветер, я северный холодный ветер
я час расставанья, я год возвращенья домой
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #7


Гуру
*****

Группа: Пользователи
Сообщений: 1 013
Пол: Мужской
Ада: Разработчик
Embarcadero Delphi: Разработчик
Free Pascal: Разработчик

Репутация: -  627  +


[offtop]
Цитата
Дельфа сама всем строкам ноль дорисовывает, не надо это делать руками.
Неправда:
Прикрепленное изображение
Где #0 в Drive[4]? (Настройки проекта - стандартные, ничего специфического не менял)
[/offtop]
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #8


Злостный любитель
*****

Группа: Пользователи
Сообщений: 1 755
Пол: Мужской

Репутация: -  62  +


Да действительно, я увидел в конце ноль, потому что глобальные переменные инициализируются нулём, а так там ноль не добавляется.


--------------------
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 

 Ответить  Открыть новую тему 
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 




- Текстовая версия 18.01.2018 8:49
Хостинг предоставлен компанией "Веб Сервис Центр" при поддержке компании "ДокЛаб"