![]() |
|
|
Регистрация Восстановить пароль |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
![]() |
|
|
Опции темы
![]() |
Поиск в этой теме
![]() |
![]() |
#21 |
Старожил
Регистрация: 13.08.2009
Сообщений: 2,581
|
![]()
Рекомендую почитать: http://www.transl-gunsmoker.ru/2011/01/2197.html и http://www.delphikingdom.ru/asp/view...#SubHeader_2_6
Применительно к вашему случаю (и моему предыдущему примеру) это должно выглядеть примерно как-то так: Код:
По поводу выделения отдельного метода (LoadWorkFiles) - рекомендую почитать это: http://www.gunsmoker.ru/2011/01/blog-post.html По поводу отказа от Form1 - см. http://www.gunsmoker.ru/2011/04/blog-post.html (загрузил, да ![]()
Опытный программист на C++ легко решает любые не существующие в Паскале проблемы.
Последний раз редактировалось GunSmoker; 03.06.2011 в 03:59. |
![]() |
![]() |
![]() |
#22 |
220400
Форумчанин
Регистрация: 21.05.2010
Сообщений: 726
|
![]()
Сколько траев о_О, а нельзя использовать FileExists для проверки существования файлов?
Конструкцию try..except лучше по-моему применять для "черных ящиков" - функций которые возвращают, или могут вернуть, не обрабатываемую ошибку в своем теле.
Cерьёзной помощи не ждите - помогаю в перерывах на "перекур".
Не существует ничего невозможного для человека, который не собирается ничего делать сам. Не учите человека, если вы не его учитель. |
![]() |
![]() |
![]() |
#23 | |
Старожил
Регистрация: 13.08.2009
Сообщений: 2,581
|
![]() Цитата:
А с чего ты взял, что отсутствие файла может быть единственной проблемой? Как насчёт: файл есть, но доступ заблокирован? Как насчёт: файл есть, но пустой? Как насчёт: файл есть, не пустой, но в нём неверные данные? Если не использовать исключения, то код будет выглядеть примерно так: Код:
![]() Причём в случае FileExists у вас, кроме того, возникает ситуация условий гонки между проверкой и использованием. Иными словами, FileExists может показать, что файл есть, но до момента его открытия его кто-то удалит. Что, в конечном итоге, оставляет нас с первоначальным вариантом.
Опытный программист на C++ легко решает любые не существующие в Паскале проблемы.
|
|
![]() |
![]() |
![]() |
#24 |
Уважаемый
Форумчанин
Регистрация: 04.07.2010
Сообщений: 318
|
![]()
Будем пробовать. GunSmoker наверное наиболее правильный вариант предложил, использовать буду именно его. Если что-то будет не так - напишу об этом.
GunSmoker, благодарю вас за хорошее решение.
даешь высокое напряжение
|
![]() |
![]() |
![]() |
#25 |
Уважаемый
Форумчанин
Регистрация: 04.07.2010
Сообщений: 318
|
![]()
...
try CopyFile(Pchar(dir + '\Themes\Space\Back5.bmp'), Pchar('C:\CNC SS v4.02\Themes\Space\Back5.bmp'), true); CopyFile(Pchar(dir + '\Themes\Space\Back9.bmp'), Pchar('C:\CNC SS v4.02\Themes\Space\Back9.bmp'), true); CopyFile(Pchar(dir + '\Themes\Space\Back.jpg'), Pchar('C:\CNC SS v4.02\Themes\Space\Back.jpg'), true); CopyFile(Pchar(dir + '\Themes\Space\Config'), Pchar('C:\CNC SS v4.02\Themes\Space\Config'), true); CopyFile(Pchar(dir + '\Themes\Space\Crystal.bmp'), Pchar('C:\CNC SS v4.02\Themes\Space\Crystal.bmp'), true); CopyFile(Pchar(dir + '\Themes\Space\Edit.bmp'), Pchar('C:\CNC SS v4.02\Themes\Space\Edit.bmp'), true); CopyFile(Pchar(dir + '\Themes\Space\SeConfig'), Pchar('C:\CNC SS v4.02\Themes\Space\SeConfig'), true); except begin res:= MessageDlg('Необходимые компоненты не найдены. Установка будет отменена.', mtWarning, [mbOk], 0); if res = mrOk then begin if not MyRemoveDir('C:\CNC SS v4.02') then ShowMessage('Невозможно удалить данный каталог. Попробуйте деинсталлировать его другими способами.'); Application.Terminate; end; end; end; ... Почему даже если одного файла нет, процедура не прерывается? И не появляется сообщение?
даешь высокое напряжение
|
![]() |
![]() |
![]() |
#26 |
Старожил
Регистрация: 17.11.2010
Сообщений: 18,922
|
![]()
CopyFile возвращает значение, не поднимая исключение в случае аварии
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию
|
![]() |
![]() |
![]() |
#27 |
Уважаемый
Форумчанин
Регистрация: 04.07.2010
Сообщений: 318
|
![]()
А как обработать ?
даешь высокое напряжение
|
![]() |
![]() |
![]() |
#28 |
Старожил
Регистрация: 17.11.2010
Сообщений: 18,922
|
![]()
если по образцу 21 поста, то примерно так
if not CopyFile(...) then raise EInvalidFileData.Create('Ошибка копирования файла такого-то');
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию
|
![]() |
![]() |
![]() |
#29 |
Уважаемый
Форумчанин
Регистрация: 04.07.2010
Сообщений: 318
|
![]()
только так: raise Exception.Create('Ошибка копирования файла такого-то');
даешь высокое напряжение
|
![]() |
![]() |
![]() |
#30 |
Форумчанин
Регистрация: 29.06.2008
Сообщений: 603
|
![]()
Moжет FileExists'ом проверять наличие файла?
/// уже предлагали ![]() |
![]() |
![]() |
![]() |
|
![]() |
||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
Обработка исключений | Ckomoroh | Общие вопросы Delphi | 6 | 21.03.2011 08:52 |
обработка исключений | user666 | Помощь студентам | 36 | 27.08.2010 18:00 |
ошибка при закрытии формы после обработки в потоке | furstenberg | Общие вопросы Delphi | 7 | 05.07.2010 12:19 |
Обработка исключений | _-Re@l-_ | Общие вопросы Delphi | 3 | 17.06.2010 08:53 |
WebBrowser и ошибка 404, идея ее обработки | celovec | Работа с сетью в Delphi | 3 | 22.02.2009 19:40 |