Db.mdf используется другим процессом

Теперь код выглядит следующим образом:

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

Попробуйте использовать следующий код:

        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