Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2014.10.05;
Скачать: CL | DM;

Вниз

Обработка исключений   Найти похожие ветки 

 
JohnKorsh   (2013-10-25 14:13) [0]

Добрый день!
Не подскажет ли кто как грамотно обработать исключение, если вставлен CardReader без карт.
Поясню. Программа записывает данные на USB-Flash накопитель. Чтобы пользователь знал, что Flash вставлен я периодически опрашиваю наличие съёмных дисков:
const
// Letters of the driver.
 Drive_L                       : array [1..26] of pchar = ("A:\", "B:\", "C:\", "D:\", "E:\",
                                                           "F:\", "G:\", "H:\", "I:\", "J:\",
                                                           "K:\", "L:\", "M:\", "N:\", "O:\",
                                                           "P:\", "Q:\", "R:\", "S:\", "T:\",
                                                           "U:\", "V:\", "W:\", "X:\", "Y:\",
                                                           "Z:\");
...
// По таймеру один раз в секунду:
  for i := 3 to 26 do
   begin
    if (GetDriveType (Drive_L [i]) = DRIVE_REMOVABLE) then
     begin
       Flash_Letter := Drive_L [i];
      k := DiskFree (Ord (Flash_Letter [1]) - 64);
      if (k < 1000000) then
       begin
          F_Inf.L_Info.Caption := "На FLASH диске малло места" + Chr ($0D) + Chr ($0A) +
                "        (" + Flash_Letter + ":)   -  " + FloatToStrF (k/1000000, ffFixed, 6, 6) +
                                    " MB." + Chr ($0D) + Chr ($0A) + "Он может переполнится";
           F_Inf.ShowModal;
       end;

Пока пользователь (да и я тоже) не вставлял CardReader всё шло хорошо.
При вставленном CardReader-е добавилось четыре диска, пустые и, прии попытке k := DiskFree (Ord (Flash_Letter [1]) - 64); Windows выдаёт справедливо
ошибку, что не вставлен диск. Если четыре раза нажать на "Пропустить", то всё нормально до следующей секунды.
Хочу обрабатывать эту ошибку сам, но код
try
k := DiskFree (Ord (Flash_Letter [1]) - 64);
except
Continue;
end;
не помогает - всё равно Windows выводит сообщение.
Как избавиться от сообщения и Cotinue?


 
Ega23 ©   (2013-10-25 14:18) [1]

On error, -1 is returned.


 
JohnKorsh   (2013-10-25 15:17) [2]

Извините, а можно чуть подробнее?


 
Туповатый ©   (2013-10-25 15:37) [3]

http://citforum.ru/programming/32less/les18.shtml


 
Ega23 ©   (2013-10-25 15:37) [4]

http://www.delphisources.ru/pages/faq/faq_delphi_basics/DiskFree.php.html


 
JohnKorsh   (2013-10-25 15:38) [5]

По размышлении суть вопроса проще - как определить вставлен ли в CardReader диск?


 
Туповатый ©   (2013-10-25 15:43) [6]

http://minilabmaster.com/cgi-bin/yabb2/YaBB.pl?action=print;num=1257185924


 
MBo ©   (2013-10-25 15:55) [7]

Проще не вести постоянный опрос, а отслеживать сообщение WM_DEVICECHANGE с соответствующими параметрами.

Если всё же теребить диски хочется, то подавлять данные ошибки можно так:
http://msdn.microsoft.com/en-us/library/windows/desktop/ms680621.aspx


 
[ВладОшин] ©   (2013-10-25 15:56) [8]

https://www.google.ru/#newwindow=1&q=%D0%BF%D1%80%D0%BE%D0%B2%D0%B5%D1%80%D0%BA%D0%B0+%D0%B3%D0%BE%D1%82%D0%BE%D0%B2%D0%BD%D0%BE%D1%81%D1%82%D0%B8+%D0%B4%D0%B8%D1%81%D0%BA%D0%B0+delphi


 
JohnKorsh   (2013-10-25 17:10) [9]

Спасибо большое.
Помог вот такой код:

 var
  EMode                                : Word;
...
for i := 3 to 26 do
     begin
      if (GetDriveType (Drive_L [i]) = DRIVE_REMOVABLE) then
       begin
        Flash_Letter := Drive_L [i];

        EMode := SetErrorMode(SEM_FAILCRITICALERRORS);
        try
         k := DiskFree (Ord (Flash_Letter [1]) - 64);
         if k <= 0 then
          begin
           SetErrorMode(EMode);
           Continue;
          end;
        finally
         SetErrorMode(EMode);
        end;
       ...



Страницы: 1 вся ветка

Текущий архив: 2014.10.05;
Скачать: CL | DM;

Наверх




Память: 0.49 MB
Время: 0.004 c
15-1393662306
Demo
2014-03-01 12:25
2014.10.05
SQl import


15-1393014602
Юрий
2014-02-22 00:30
2014.10.05
С днем рождения ! 22 февраля 2014 суббота


8-1234686127
Зашибис
2009-02-15 11:22
2014.10.05
Потоковое видео с IP-камеры AVIOSYS 9060A-MP на форме D6


15-1393088378
big_djo
2014-02-22 20:59
2014.10.05
Я Написал Книжку по Делфи, хотел бы узнать Ваше мнение и отзывы


11-1255007559
Валера
2009-10-08 17:12
2014.10.05
Шрифт size