db.mdf正被另一个进程使用

时间:2014-07-30 15:32:14

标签: c# filestream localdb file-locking

现在,代码如下所示:

private void DatabaseIntegrityCheck()
{
    try
    {
        string m_checksum;
        using (FileStream stream = File.OpenRead(@"C:\~\db.mdf"))
        {
            SHA256Managed sha = new SHA256Managed();
            byte[] checksum = sha.ComputeHash(stream);
            m_checksum = BitConverter.ToString(checksum).Replace("-", String.Empty);
        }

        Console.WriteLine(m_checksum);

    }
    catch (Exception ex)
    {
        Console.WriteLine("unable to retrieve checksum");

    }

}

当我在代码中设置断点以查看异常是什么时,我得到一个IOException:

进程无法访问文件'db.mdf',因为它正由另一个进程使用。

我运行校验和的方式是在我的窗口中有一个按钮,当我单击它时,将调用上面的方法来执行操作。我想检查并查看它是否先工作,所以我只是Console.WriteLine校验和哈希,但上面的异常被抛出。

我该怎么做才能解决这个问题?

1 个答案:

答案 0 :(得分:-1)

请尝试以下代码:

        try
        {
            string mChecksum;
            using (FileStream stream = File.OpenRead(@"E:\draft.pdf"))
            {
                var sha = new SHA256Managed();
                var cs = new CryptoStream(stream, sha, CryptoStreamMode.Read);
                cs.FlushFinalBlock();
                byte[] hash = sha.Hash;

                mChecksum = BitConverter.ToString(hash).Replace("-", String.Empty);
            }

            Console.WriteLine(mChecksum);

        }
        catch (Exception ex)
        {
            Console.WriteLine("unable to retrieve checksum");

        }

查看有关CryptoStream

的详细信息