Справочник программиста на персональном компьютере фирмы IBM. Дисковые накопители
Страница 6. Восстановление  после  ошибок,  связанных  с  нехваткой пространства на диске


     5.1.4  Восстановление  после  ошибок,  связанных  с  нехваткой пространства на диске.


   При  попытке записи на полный диск может произойти крах  прог-
раммы. Часто легко избежать этого, даже в Бейсике, проверив пред-
варительно наличие дискового пространства [5.1.2].  Однако,  если
ошибка произошла, то  постарайтесь  дать пользователю возможность
исправить  ее.   Позвольте ему сохранить только часть данных  или
стереть какой-нибудь другой  файл  и  повторить попытку. Или, еще
более радикальное средство, позвольте пользователю вставить  дру-
гую дискету. Последний  подход  должен  реализовываться с большой
осторожностью. Сначала закройте все открытые файлы. Затем выдайте
запрос на смену дискеты.  После  того,  как пользователь сообщит,
что  новая дискета на месте, создайте новый файл и запишите  туда
данные.

   Высокий уровень.


   В Бейсике  надо  установить  процедуру  обработки  ошибок, как
показано в [7.2.5].  Если оператор Бейсика делает попытку  писать
на полный диск, то возвращается код ошибки #61. При этом управле-
ние  может быть передано процедуре обработки ошибок, которая  ин-
формирует пользователя  о  проблеме  и позволяет ему справиться с
ней, не теряя данных.

100 ON ERROR GOTO 5000     'разрешаем обработку ошибок
 .
 .
200 OPEN FNAME$ FOR OUTPUT AS #1  'открываем файл
210 FOR N = 1 TO ARRLEN    'начинаем писать массив на диск
220 PRINT #1, ARRAY$(N)    'записываем один элемент
230 NEXT                   '
 .
 .
5000 IF ERR = 61 THEN 5100  'диск полон?
5100 IF ERR = ...           'другие ошибки ...
 .
5100 '''восстановление при переполнении диска
5110 BEEP: PRINT "Disk full - choose an option:"
5120 PRINT "(A) - Re-edit the file"
5130 PRINT "(B) - Delete some other file from disk"
5140 PRINT "(C) - Use different diskette"
 .       (здесь идет процедура восстановления)
 .
5500 RESUME

   Средний уровень.


   Все  функции  DOS, которые пишут на диск, выдают  определенный
код ошибки при попытке  записи  на  полный  диск. Вот сводка этих
кодов:

   Метод доступа  Функция        Название            Код ошибки

      FCB          15H      Последовательная запись    AL = 1
      FCB          22H      Прямая запись              AL = 1
      FCB          27H      Прямая запись блока        AL = 1
   Дескриптор      40H      Запись в файл/устройство   CX <> BX

Проверяйте  эти  ошибочные условия после каждой записи  на  диск.
Поскольку критической ошибки не  происходит, то восстановление не
вызывает  проблем.   Надо только проверять на ошибку  каждый  раз
когда Вы вызываете одну из этих функций  и создать хорошую проце-
дуру обработки ошибок по Вашему вкусу.

 
« Предыдущая статья   Следующая статья »