Привет, коллеги! С новым Годом! Вот Вам вопрос-тест :) Ответ я знаю. А вы найдете? Хотелось бы увидеть ответы от всех. :) Подробно не смотреть, а то не интересно получится :))) Задача: Удалить в текущем каталоги файлы с именами "1".."9" а потом их создать нулевой длины. Решение в приложении дает ошибку. Какую строчку надо добавить, чтобы прогу заработала? Нужны инимальные изменения, в принципе - добавка 1 строки! Удачи! ЗЫ Если кто не знал: Добавка опций компилятора в исходник - Ctrl+O, O
Здравствуйте, Sensey! И тебя с прошедшим! Смотри приложение.
Приложение: Ответ отправлен: 02.01.2003, 13:13 Отправитель: Ace Отвечает Necro
Доброе время суток, Sensey! По идее неплохо бы после Erase проверить на наличие ошибки(IOResult). Если он не нулевой и ты его не посмотрел, то дальше тебя к диску не пустят. Ответ отправлен: 02.01.2003, 13:11 Отправитель: Necro Отвечает Tancho
Добрый день, Sensey! Я не знаю какая цель ты ставиш с этом задачку, но если вставим опции - {$I-} перед rewrite(f) и {$I+} после close(f), прогу дает все что ты хочешь и нет никаких ошибок. Смотри приложению!
Приложение: Ответ отправлен: 02.01.2003, 15:01 Отправитель: Tancho Отвечает Vadim
Здравствуйте, Sensey! Я, честно говоря, не понял, в чем прикол :)). Если файлы с именами "1".."9" существуют, то твой код никакой ошибки не даст, сначало удаляет их, а потом создает нулевой длины. Если же файлы эти не существуют, тогда конечно :)). Нужно будет обратиться к функции IOResult, раз уж ты выключаешь встроенную проверку, чтобы обнулить ошибку.
Ответ отправлен: 02.01.2003, 15:10 Отправитель: Vadim Отвечает X-RayMan
Привет, Sensey! Если отключить проверку ввода/вывода все работает. Но, наверное, это не то, что ты хотел. Найду еще что-то - скину.
Приложение: Ответ отправлен: 03.01.2003, 00:47 Отправитель: X-RayMan Отвечает Melkor
Приветствую Вас, Sensey! Странный вопрос. Если файлы есть в директории, то все работает, а если нет, нужно испол. IOResult.
Ответ отправлен: 03.01.2003, 14:15 Отправитель: Melkor Отвечает Ayl
Доброе время суток, Sensey! Да, интересная ошибка. Не знал (точнее, знал, но запамятовал), что в случае возникновения ошибки при выключенной обработке ошибок ввода-вывода ({$I-}) все дальнейшие операции ввода-вывода не изменяют флаг состояния ошибки до вызова функции IOResult. Соответственно, в твоей программе если при выполнении удаления файла процедурой erase такого файла нет, то ошибка выдана не будет (работает {$I-}), но состояние ошибки будет запомнено (код ошибки 2). И когда потом будет сделана попытка создать файл 0-й длины (rewrite (f)), уже без подавления обработки ошибок, то будет выдан а ошибка Runtime error 002 at 0000:00ea. Описание ошибки - file not found. Место возникновения - процедура rewrite (f). Что очень странно, так как данная процедура не может выдавать эту ошибку. Для исправления надо в первом цикле (где удаление) после вызова процедуры
erase (f) поставить вызов функции IOResult. Например, так: if IOResult <> 0 then begin end; или присвоить его какой-нибудь переменной. Ответ отправлен: 04.01.2003, 15:04 Отправитель: Ayl
Форма отправки вопроса
Внимание!
Форма может работать некорректно в почтовых программах "Microsoft Outlook"
и "Microsoft Outlook Express". В программе The Bat!
подобные формы не работают вообще!
После нажатия на кнопку "Отправить", будет открыто второе окно. Заметьте,
что в некоторых браузерах могут стоять запреты на открытие других
окон, а также "чрезмерное" кэширование данных,
при этом факт отправки Вашего вопроса стоит под сомнением.
Мы рекомендуем открывать рассылку в программе Internet
Explorer 5.0+ или отправлять вопросы с сайта по адресу:
http://rusfaq.ru/cgi-bin/Message.cgi.