【问题标题】:cannot rename or delete File instances无法重命名或删除文件实例
【发布时间】:2010-08-13 07:54:29
【问题描述】:

我正在编写一个 Maven 插件,它使用 File.delete()File.renameTo(File) JDK 方法删除和重命名各种文件。

大约每两次我运行插件时,其中一个操作都会失败,每次失败时,它都是一个无法删除或重命名的不同文件。为什么无法删除文件的一个明显解释是另一个进程正在使用它(我在 Windows 上运行),但我不知道哪个进程可能负责。无法始终如一地重现该问题的事实表明存在线程问题,但是 AFAIK,Maven 插件在单个线程中运行。很难获得有关问题原因的任何信息,因为上面提到的方法不会抛出异常,它们只是返回 false。

有没有办法以编程方式检测锁定的文件和持有锁定的进程的名称?或者,如果有人对如何调试此类问题有其他建议,请发送给他们。

谢谢, 唐

【问题讨论】:

  • 很难说没有看到任何代码。黑暗中的几个刺:当您打开 Windows 的文件资源管理器并查看有问题的文件时,您可能无法删除它,因为资源管理器正在锁定该文件。您确定要关闭 IO 流吗?没有吞下可能提供失败原因线索的异常?

标签: java debugging maven-2 maven-plugin io


【解决方案1】:

Handle可以让你找出哪些进程对文件有句柄。

示例输出(它是一个命令行实用程序):

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

【讨论】:

  • 我认为这对我没有多大帮助,因为在我启动程序之前我不知道哪个文件将无法删除(或重命名)。
  • @Don:所以你以后再运行它......很有可能同一个进程仍然会占用资源。
猜你喜欢
  • 1970-01-01
  • 2018-10-11
  • 2017-08-18
  • 2012-07-08
  • 2011-03-18
  • 2013-03-14
  • 1970-01-01
  • 2020-05-07
  • 2015-03-09
相关资源
最近更新 更多