Не позволите ли мне удалить папку, из которой я только что переместил файл? - PullRequest
0 голосов
/ 12 ноября 2010

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

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

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

Ответы [ 2 ]

1 голос
/ 12 ноября 2010

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

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

0 голосов
/ 12 ноября 2010

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

...