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