невозможно переименовать или удалить экземпляры файлов - PullRequest
1 голос
/ 13 августа 2010

Я пишу плагин Maven, который удаляет и переименовывает различные файлы, используя методы File.delete() и File.renameTo(File) JDK.

Примерно каждый раз, когда я запускаю плагин, одна из этих операций завершается неудачно, икаждый раз, когда это терпит неудачу, это - другой файл, который не может быть удален или переименован.Очевидное объяснение того, почему файл не может быть удален, состоит в том, что его использует другой процесс (я работаю в Windows), но я понятия не имею, какой процесс может быть ответственным.Тот факт, что проблема не может быть воспроизведена последовательно, предполагает проблему с многопоточностью, но плагины AFAIK, Maven запускаются в одном потоке.Трудно получить какую-либо информацию о причине проблемы, потому что методы, упомянутые выше, не генерируют исключения, они просто возвращают false.

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

Спасибо, Дон

1 Ответ

1 голос
/ 13 августа 2010

Дескриптор позволяет узнать, какие процессы имеют дескрипторы файлов.

Пример вывода (это утилита командной строки):

C:\Users\Jon\Downloads\Handle>handle Test.cs

Handle v3.42
Copyright (C) 1997-2008 Mark Russinovich
Sysinternals - www.sysinternals.com

Test.exe           pid: 6088    190: C:\Users\Jon\Test\Test.cs
...