Java 检查是否使用了文件
在Java和C#中,是否有任何函数可以检查文件是否被使用,就像我们试图删除已使用的文件时收到的错误消息一样Java 检查是否使用了文件,java,c#,Java,C#,在Java和C#中,是否有任何函数可以检查文件是否被使用,就像我们试图删除已使用的文件时收到的错误消息一样 如果不存在,还有什么好的检查方法?首先检查文件是否存在(file.exists),如果存在,请尝试在try和catch块中打开进行写入,如果生成异常,则由另一个进程使用。然而,通过异常发现某些东西并不是最好的方法 您可以尝试以下方法: protected virtual bool IsFileLocked(FileInfo file) { FileStream stream = n
如果不存在,还有什么好的检查方法?首先检查文件是否存在(
file.exists
),如果存在,请尝试在try
和catch
块中打开进行写入,如果生成异常,则由另一个进程使用。然而,通过异常发现某些东西并不是最好的方法
您可以尝试以下方法:
protected virtual bool IsFileLocked(FileInfo file)
{
FileStream stream = null;
try
{
stream = file.Open(FileMode.Open, FileAccess.ReadWrite, FileShare.None);
}
catch (IOException)
{
//the file is unavailable because it is:
//still being written to
//or being processed by another thread
//or does not exist (has already been processed)
return true;
}
finally
{
if (stream != null)
stream.Close();
}
//file is not locked
return false;
}
通常建议不要检查文件是否正在使用。
这是毫无意义的
假设您有以下代码:
if(file is not being used)
open file
即使
if
语句的计算结果为true
,也不能保证在您尝试打开文件时不会使用该文件。因此,只需对文件执行您想执行的任何操作,并处理可能引发的任何异常。引发异常的情况只是这种情况下正确的行为,也是预期的行为
其原因来自OO原则。您请求一个对象执行某些操作。如果不能按预期完成,则应返回此文件。像C++这样的语言,在异常不那么流行的情况下,开发者应该检查的错误代码会被返回。这很容易出错,因此对于以后的语言,API设计人员引入了异常。这给了开发人员对代码的适当控制
访问资源是一项复杂的任务,需要考虑很多情况,而且始终是一个多重情况
而不是接近的问题,该文件不能被删除和检测。您应该关注发生这种情况时应该应用的逻辑
Java解决方案:
您可以使用和方法delete(java.nio.file.Path)
当不允许删除文件时,此方法将抛出一个SecurityException
或者您可以使用该系统
如果不允许调用线程删除指定的文件,则引发SecurityException
C#的解决方案:
同样的规则也适用于C#,它将抛出一个UnauthorizedAccessException操作系统将不允许您删除作为另一个线程的资源获取的文件。请看这篇文章,该代码与PES002的答案几乎相同,令人惊讶。这是巧合吗?是的,我想是的,我从中获得了答案,但我添加了检查存在性的选项。在这些情况下,明确引用原始答案可能是一个好主意。我发现有很多评论说这不是一个好主意,但我以前使用过一次,效果很好。这就是为什么我只添加了代码,让他在代码和检查文件存在之间进行选择
SecurityManager security = System.getSecurityManager();
securty.checkDelete(String file)