Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/276.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/56.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 检查是否使用了文件_Java_C# - Fatal编程技术网

Java 检查是否使用了文件

Java 检查是否使用了文件,java,c#,Java,C#,在Java和C#中,是否有任何函数可以检查文件是否被使用,就像我们试图删除已使用的文件时收到的错误消息一样 如果不存在,还有什么好的检查方法?首先检查文件是否存在(file.exists),如果存在,请尝试在try和catch块中打开进行写入,如果生成异常,则由另一个进程使用。然而,通过异常发现某些东西并不是最好的方法 您可以尝试以下方法: protected virtual bool IsFileLocked(FileInfo file) { FileStream stream = n

在Java和C#中,是否有任何函数可以检查文件是否被使用,就像我们试图删除已使用的文件时收到的错误消息一样


如果不存在,还有什么好的检查方法?

首先检查文件是否存在(
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)