检查文件是否被使用

11 浏览
0 Comments

检查文件是否被使用

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

如果没有,还有其他好的方法可以检查吗?

0
0 Comments

这段内容讨论了如何检查文件是否正在被使用。首先,通过使用File.Exists方法检查文件是否存在。如果文件存在,尝试在trycatch块中打开文件进行写操作,如果生成异常,则表示文件正在被另一个进程使用。然而,通过异常来查找是否被使用并不是最好的方法。

可以尝试以下代码:

protected virtual bool IsFileLocked(FileInfo file)
{
    FileStream stream = null;
    try
    {
        stream = file.Open(FileMode.Open, FileAccess.ReadWrite, FileShare.None);
    }
    catch (IOException)
    {
        //文件不可用的原因可能是:
        //仍在写入
        //或者正在被另一个线程处理
        //或者文件不存在(已经被处理过)
        return true;
    }
    finally
    {
        if (stream != null)
            stream.Close();
    }
    //文件未被锁定
    return false;
}

这段代码与pes502的答案非常相似,这是巧合吗?

是的,我是从stackoverflow.com/questions/876473/…中找到的答案,但我添加了检查文件存在性的选项。

在这种情况下,最好明确引用原始答案。

我在那里发现很多评论说这不是一个好主意,但是我曾经使用过它,而且效果很好。所以我只是添加了代码,让他自己选择是否使用它以及检查文件存在性。

0
0 Comments

检查文件是否正在使用的问题是在访问资源时经常遇到的。这个问题的出现是因为面向对象的原则。当你请求一个对象执行某个操作时,如果它无法按预期完成,则应返回错误信息。在像C++这样的语言中,返回一个错误代码以供开发人员检查,但这种方式容易出错。因此,后来的语言引入了异常,使开发人员能够更好地控制代码。

访问资源是一项复杂的任务,需要考虑很多情况,而且通常涉及多线程。因此,与其关注文件无法被删除的问题并进行检测,不如专注于出现这种情况时应该应用的逻辑。

针对Java的解决方法是使用Files类中的delete方法。当文件不允许被删除时,此方法会抛出SecurityException异常。或者可以使用系统的SecurityManager类中的checkDelete方法,如果调用线程没有权限删除指定的文件,则会抛出SecurityException异常。

针对C#也是同样的规则,使用System.IO.File.Delete方法,当文件无法访问时会抛出UnauthorizedAccessException异常。

0
0 Comments

检查文件是否正在使用通常被认为是不明智的,因为这是没有意义的。即使if语句评估为true,也无法保证在尝试打开文件时该文件不会被使用。因此,只需按照您想要处理文件的方式处理它,并处理可能抛出的任何异常。

解决方法:不要检查文件是否正在使用,直接处理文件并处理可能抛出的异常。

0