| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > VB6 > Папки |
| Автор: alt5000 31.1.2007, 10:46 | ||
| Предлагаю подумать над, по моему , неразрешимой проблемой. Я, во всяком случае не могу вообще понять.... Есть форма, на которой 2 элемента: текстовое поле и кнопка. Кнопка содержит следующий код:
Вся проблема в том, что программа выдает ошибку на строке RmDir. Пожалуйста, создайте модель в редакторе и посмотрите, в чем может быть загвоздка. Буду благодарен за помощь |
| Автор: Naghual 31.1.2007, 14:03 |
| Если все написано правильно, папка не используется другими процессами и права пользователя позволяют ему удалить папку, значит папка не пуста. |
| Автор: alt5000 31.1.2007, 14:17 |
| В том - то все и дело, что оператор RmDir следует прямо за оператором kill, который убивает все файлы в этой папке. а он - то как раз выполняется успешно, следовательно, после него, в папке ничего не остается. Алгоритм - то прос: Если есть папка - удалить, если нет - создать Неужели не один я не могу с этим справиться? |
| Автор: Naghual 31.1.2007, 14:47 |
| А Kill может и не отработаться... |
| Автор: alt5000 31.1.2007, 15:52 |
| Я просматривал содержимое папки при пошаговом прохождении программы после kill. Результат - папка пуста! |
| Автор: JusTalionis 31.1.2007, 15:57 |
| А не создается ли в той папке, автоматически, какой-нибудь скрытый файл, вроде desktop.ini ? сделай паузу после kill, влезь во время этой паузы в папку при помощи другого процесса, например в ВинКоммандере, и проверь, пустая ли она в действительности, или нет? А какую именно ошибку показывает RMDIR? |
| Автор: Naghual 31.1.2007, 16:00 |
| А вручную удалить можеш ее? |
| Автор: alt5000 31.1.2007, 16:29 | ||||
Да, что я и делаю, после того как возникла ошибка, так как она возникает после kill, то dir не отрабатывается и для чистоты эксперимента я удаляю папку и запускаю программу снова Добавлено @ 16:32
RmDir вызывает ошибку 75 Path/file access ... Попробуйте в редакторе создать тогда может что-нить станет яснее, но согласитесь, ситуация парадоксальная. Алгоритм - то прост до безумия: Если есть папка - удалить. если нет - создать. Может обратиться в центр техподдержки? |
| Автор: bom 31.1.2007, 17:13 | ||
| Помнится я уже давал http://forum.vingrad.ru/topic-132262/hl/index.html для подобной задачи с использованием FSO. Если все же хочется удалять папку и вложенные (только файлы) используя RmDir, держи этот:
|
| Автор: JusTalionis 31.1.2007, 17:25 |
| А где есть центр такого профиля? Кста, по моему личному опыту общения с различными техподдержками, думаю этот вопрос для них слишком сложен 75 - access denied? - это значит, объект находится в использовании программой, поэтому не может быть удален. после того, как она возникла, прога уже закрылась и освободила папку, поэтому ты и можешь ее удалить вручную. Ты попробуй во время паузы, пока ошибка еще не появилась. И проверь, нет ли там скрытого файла (лучше коммандером - Винда может не показать), скрытые kill не удаляет. |
| Автор: alt5000 1.2.2007, 09:30 | ||||
Access error! Добавлено @ 09:38
Огромное спасибо за код , он отлично работает |
| Автор: JusTalionis 1.2.2007, 14:46 | ||
| alt5000 Проверил твой код. Под Win98 всё пашет; первое нажатие создает папку, второе ее удаляет. Но под XP получается тот самый глюк с ошибкой 75. Что бы это могло быть? Предположительно - XP пытается выполнить rmdir раньше, чем закончится kill. Для проверки вставляем паузу с контролем удаления между kill и rmdir. Получился следующий код:
- фокус-покус! |
| Автор: bom 1.2.2007, 19:49 |
Предпочитаю не углубляться в дебри теории, если существует более лучший и работающий способ. Применительно к данному случаю - вероятно обращение к папке (функцией Dir) блокирует эту папку. |
| Автор: JusTalionis 2.2.2007, 12:41 |
| bom Нет, просто XP выполняет kill и rmdir как внешние процессы, то есть они выполняются параллельно, и kill не успевает удалить содержимое, вот и всё... Я вставил паузу (см выше) и всё заработало... ЗЫ по крайней мере, у меня )) |
| Автор: alt5000 5.2.2007, 10:09 | ||
Ты - гений! Правда я не знаю, что такое Wend, но программа работает и структура изначального алгоритма полностью сохранена. |
| Автор: Кирилл 5.2.2007, 18:41 |
alt5000, такие пробелы нужно убирать Цикл типа While ... Wend то же самое что и Do while ... loop, только старее. В принципе он уже не нужен, но для совместимости его оставили. P.S. Само слово Wend расшифровывается как While end. |
| Автор: JusTalionis 6.2.2007, 18:04 |
| в дополнение к сказанному Кириллом: Исходя из моего предположения о выполнении rmdir, я вставил между ними пустой цикл с проверкой удаленности файлов - постоянно проверять, пока реально не окажется, что уже ни одного файла нету, и на этом кончается цикл и запускается rmdir. cardinal, а что, не разноцветный код на форуме воспрещен? |