好问题
Good  Question
  • 首 页
  • 问题
    • PHP
    • JAVA
    • CPlusPlus
    • C#
    • SQL
  • 关 于
  • 联 系
有没有办法检查文件是否正在使用? 关闭 返回上一级  

有没有办法检查文件是否正在使用?
+ 查看更多

发布日期:2018-02-23 13:55
分类:C#
浏览次数:106
我用c#编写一个程序,需要多次访问一个图像文件。大多数时候它处于工作中,但如果我的电脑运行速度快,它将尝试访问该文件之前已经保存文件系统和抛出一个错误:“文件被另一个进程使用”。
我想找到一个方法,但是我所有的Google搜索只是通过使用异常处理来创建检查。这是违反我的初衷,所以我想知道有没有人有更好的做法?
 
 
回答:
 
更新了关于此解决方案的注意事项:使用FileAccess.ReadWrite进行检查将为只读文件失败,因此解决方案已被修改,以便与FileAccess.Read一起检查。 虽然这个解决方案的工作原理是因为尝试检查FileAccess.Read将失败,如果该文件有一个写或读锁定,但是,如果该文件没有写或读锁定,这个解决方案将无法工作,即它已被打开(用于阅读或写入)与FileShare.Read或FileShare.Write访问。
原文:我在过去几年中使用过这个代码,我没有任何问题。
了解你对使用异常的犹豫,但你无法避免他们在任何时间:
protected virtual bool IsFileLocked(FileInfo file)
{
    FileStream stream = null;

    try
    {
        stream = file.Open(FileMode.Open, FileAccess.Read, 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;
}
上一篇如何获取当前foreach循环的索引?
LINQ中的分组下一篇
下一篇LINQ中的分组

最新文章

  • 函数`__construct`用来干嘛的
    发布日期:2018-03-26
  • 通过访客的IP得到他们的地区
    发布日期:2018-03-26
  • 合并两个PHP对象的最好的方法是什么?
    发布日期:2018-03-26
  • 该如何把一该如何把一个对象转化成数组?
    发布日期:2018-03-26
  • 什么是输出缓冲区?
    发布日期:2018-03-26
  • 在PHP中怎么把用逗号分隔的字符串分隔在一个数组里?
    发布日期:2018-03-26
  • 在PHP中使用foreach循环时查找数组的最后一个元素
    发布日期:2018-03-26
关于好问
收集整理一些有用的问题和回答,造福中国的程序旺和IT喵们!
友情链接
起飞页 
相关信息
版权声明
Copyright © 2016 - 2022  苏州卡达网络科技有限公司 备案号:苏ICP备09008221号