“该进程无法访问文件'D:\ dup.jpg',因为它正被另一个进程使用。”

时间:2011-09-20 06:32:20

标签: c#

任何人都可以在这个问题上指导我..

如何在VC#中避免此异常 -

  

"该过程无法访问该文件' D:\ dup.jpg'因为它正在   由另一个进程使用。"

Adi的解决方案根本没有解决..

代码片段就在这里..

using (FileStream firstImageStream = 
    new FileStream(firstImage.FullName, FileMode.Open))
{
    using (FileStream secondImageStream = 
        new FileStream(secondImage.FullName, FileMode.Open))
    {
        hashingTool = new SHA256Managed();
        Byte[] imageOneHash = hashingTool.ComputeHash(firstImageStream);
        Byte[] imageTwoHash = hashingTool.ComputeHash(secondImageStream);
        hashingTool.Clear();
    }
}

2 个答案:

答案 0 :(得分:2)

您可以尝试使用FileStreamFileAccess参数的FileShare构造函数。

并指定,例如FileAccess.ReadFileShare.Read,以允许其他进程(或您的进程)打开同一个文件进行阅读。

这方面的简写是File.OpenRead方法:

using (FileStream secondImageStream = File.OpenRead(secondImage.FullName)) 
{
    ...
}

当前代码默认为写入访问权限(FileAccess.ReadWrite),并且共享以进行读取访问(FileShare.Read)。因此,两个并发呼叫将发生冲突。

答案 1 :(得分:0)

我建议先使用Handle找出锁定文件的进程。如果这不是您正在编译的过程,那么您得到了答案。如果您自己的进程正在锁定文件,那么在上面的代码的开头放置一个断点,在每个阶段运行Handle以查看文件被锁定的时间。