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

То же самое относится и к памяти. При ее выделении обязательно надо проверять полученный указатель. Может случиться, что вы запросили слишком много памяти или произошел какой-то сбой. В Windows 2000/ХР таких проблем не возникает благодаря хорошей "подкачке" и динамическому выделению памяти, но пользователь может работать и в Win9x.

Если программа должна работать с такими устройствами, как принтер или звуковая карта, то перед попыткой использования убедитесь в их наличии. Если вы думаете, что компьютер без звука сейчас немыслим, то сильно ошибаетесь. Мои пользователи часто присылают свои конфигурации, когда у них возникают проблемы, и компьютеры без звука еще встречаются. Это происходит не среди российских пользователей, а за рубежом.

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

Однажды я писал программу экономической отчетности (это был 1995 год, и писал я на языке Pascal) для крупного предприятия и не следил за памятью. Конечно же, тогда это были MS DOS и компьютер только 386 DX с 8 Мбайт оперативной памяти. Для программы выделялся очень маленький стек, и память была сильно ограничена. Отчет был небольшой, поэтому я понадеялся, что памяти хватит. Два месяца действительно не было проблем, а потом программа выдала один отчет, в котором данные были завышены в 100 раз, а я этого не заметил и сдал документы. Когда фирма владеет только миллионом, а отчетность вышла на триллионы, у директора может случиться инфаркт. У этого сердце выдержало. Осуществив расчет повторно, я добился правильных результатов. Трудно сказать, что было причиной сбоя, но после того как я добавил в программу проверку ресурсов, проблем больше никогда не было.

После этого случая я всегда проверяю любые выделяемые ресурсы и не надеюсь на файлы "подкачки", потому что и они могут закончиться, если на диске недостаточно свободного места.

Перед каждым обращением к файлу обязательно проверьте его наличие. Незачем обрабатывать ошибку при открытии, когда есть функция FileExists с помощью которой можно заранее предотвратить будущие ошибки. В Delphi многие списки (например, TStrings) можно сохранять и загружать с диска методами SaveToFile и LoadFromFi 1 е. При сохранении ошибка может возникнуть при неправильном указании пути, а при загрузке - при отсутствии файла.

Рассмотрим пример. Допустим, что в программе есть список TListBox. Мы хотим, чтобы при выходе из программы все элементы списка сохранялись в файле, а при старте загружались. Посмотрим на следующий обработчик события OnShow:

procedure TMainForm.FormShow(Sender: TObject): begin ListBoxl.I terns.LoadFromFile('c:\list.txt'); // Инициализация

end:

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

Возможно решить проблему двумя способами:

в заключить код загрузки данных из файла в try. .except;

в заранее проверить существование файла.

Я рекомендую делать и то и другое. Лишняя проверка не помешает:

procedure TMainForm.FormShowCSender: TObject);
begin
if Fi1eExists('C:\list.txt') then try
ListBoxl.Items.LoadFromFi1e('c-\lTSt.txt'): except

ShowMessage('Ошибка загрузки файла'):

end;
// Инициализация end;

В данном случае загрузка произойдет, только если файл существует Проверка на наличие ошибок все равно присутствует, потому что бывают еще испорченные файлы, неправильный формат и т. д.

1.6.1. Входные параметры || Оглавление || 1.6.3. Освобождайте ресурсы


Delphi в шутку и всерьез: что умеют хакеры



Новости за месяц

  • Декабрь
    2021
  • Пн
  • Вт
  • Ср
  • Чт
  • Пт
  • Сб
  • Вс
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31