Не позволит мне удалить папку, из которой я только что переместил файл?

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

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

Я бы показал вам код, но он очень простой (т.е. одна строка, Directory.Delete). Я также пытался использовать DirectoryInfo.Delete, но это не помогло. Как я уже сказал, он отлично работает из графического интерфейса.


person Matt G    schedule 12.11.2010    source источник


Ответы (2)


Правильно ли я предполагаю, что удаление из графического интерфейса означает, что папка в данный момент не открыта в проводнике, тогда как при удалении с помощью контекстного меню папка (очевидно) открыта? Если да, то в в этом блоге могут быть некоторые проникновение в проблему. Кроме того, вот еще один вопрос SO который спросил, как закрыть окно проводника. Может помочь.

«Семейство операционных систем Windows NT сохраняет открытым дескриптор текущего каталога процесса».

person Nick Spreitzer    schedule 12.11.2010
comment
Спасибо, Ник, моя проблема была на 100% решена просто с помощью Directory.SetCurrentDirectory(AnywhereOtherThanHere) :-) - person Matt G; 12.11.2010

Я думаю, что происходит, Explorer пытается удалить папку, в то время как файл копируется или перемещается. Что вам нужно сделать, так это создать отдельный поток, который сначала перемещает или копирует файл (или файлы), а затем, когда этот поток завершается, удаляет папку.

person Icemanind    schedule 12.11.2010