Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Начинающим";
Текущий архив: 2014.10.05;
Скачать: [xml.tar.bz2];

Вниз

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

 
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;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.47 MB
Время: 0.002 c
8-1235415285
Кошкин
2009-02-23 21:54
2014.10.05
Модель в редакторе и в программе


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


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


15-1393012843
Михаил
2014-02-22 00:00
2014.10.05
генирация RTF документов


15-1393360202
Юрий
2014-02-26 00:30
2014.10.05
С днем рождения ! 26 февраля 2014 среда





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский