10

我想写入/删除一个文件,但如果该文件正在被另一个程序使用,有时我会崩溃。如何检查文件是否被另一个进程打开或者我可以打开它进行写入?

4

5 回答 5

34

问题是,在您检查是否可以获得独占访问和打开文件之间,其他东西获得了对该文件的独占访问,并且无论如何您都会遇到异常。

查看是否可以在文件上获得排他锁的唯一万无一失的方法是尝试在文件上获得排他锁,如果你得到它,你就拥有它。

如果没有,你会捕获异常,并且要么

  • 去做点别的
  • 稍等片刻再试一次

这是生活中的一种情况,最好是请求宽恕而不是允许:)

于 2009-02-02T12:51:55.937 回答
4

有一种新方法可以获取 Vista 及以上文件锁定的来源: http ://www.remkoweijnen.nl/blog/2011/01/03/cannot-access-files-but-need-the-origin/

UserMode:写入锁定文件的最佳方式是要求用户在其他进程中将其关闭。在批处理过程中,您应该忽略此类文件并记录问题。提供其他进程的名称是为用户找到解决方案的好方法。

于 2011-01-03T10:43:28.837 回答
0

不确定您要检查是否可以写入文件的编程语言。在 Java 中,java.io.File.canWrite()可以为您完成这项工作。

一般的:

在类 UNIX 操作系统中,您可以使用lsof命令。

于 2009-02-02T12:14:22.970 回答
0

如果您想查看哪个程序拥有您文件的句柄,请使用Process Monitor(从 MicroSoft 下载)。

该工具有一个命令行界面,因此您可以使用您的语言的脚本界面(例如java.lang.Process)来运行该工具并显示有用的错误消息。

于 2009-02-02T12:21:09.507 回答
0

在http://delphi.about.com/cs/adptips1999/a/bltip0999_3.htm中给出的 IsFileInUse

于 2009-02-02T12:58:59.743 回答