computeHash byte [] и разность потоков - PullRequest
5 голосов
/ 01 сентября 2010

У меня были некоторые проблемы с computeHash.Я использую как computeHash (Stream) и computeHash (byte []).По какой-то причине они дают другой результат.Я пытался записать byte [] в MemStream, но результат был таким же, когда он использовал Byte []

FileStream zz = new FileStream(t.Filename, FileMode.Open, FileAccess.Read);
StreamReader sr = new StreamReader(zz, Encoding.ASCII);
byte[] data = Encoding.ASCII.GetBytes(sr.ReadToEnd());
MemoryStream memStream = new MemoryStream(data);
byte[] test = md5hash.ComputeHash(memStream);

Я закрыл файл, чтобы убедиться, что позиция поиска находится в начальной точке.

zz = new FileStream(t.Filename, FileMode.Open, FileAccess.Read);
zz.Position = 0;
byte[] test1 = md5hash.ComputeHash(zz);

Есть предложения?Мое единственное предположение, что это либо проблема кодирования, либо поток имеет другой размер.

Любая помощь будет принята с благодарностью.

С наилучшими пожеланиями,
SunSatION

1 Ответ

2 голосов
/ 01 сентября 2010

Некоторые кодировки файлов имеют скрытые символы, чтобы предупредить потребительское приложение о формате файла.Одна комбинация:

ï »¿

У меня есть файл в формате UTF8, и я запустил следующее:

byte[] asciidata, streamdata;
using (var zz = new FileStream("utf8.txt", FileMode.Open, FileAccess.Read))
{
    var sr = new StreamReader(zz, Encoding.ASCII);
    asciidata = Encoding.ASCII.GetBytes(sr.ReadToEnd());
}

using (var zz = new FileStream("utf8.txt", FileMode.Open, FileAccess.Read))
{
    streamdata = new byte[asciidata.Length + 3];
    zz.Read(streamdata, 0, streamdata.Length);
}

Переменная asciidata содержал четыре символа в моем текстовом файле, но streamdata содержал четыре символа с префиксом трех магических символов, описанных выше (всего семь символов) .

В заключениеЯ полагаю, что ваше подозрение, что кодировка виновата, является правильным.

...