Я пытаюсь прочитать первые 16 байтов, которые загружены в поток памяти в ТБ.Этот метод ReadBuffer генерирует исключение нарушения прав доступа.
Я хочу загрузить зашифрованные данные из файла.Первые 16 байтов являются MD5-хэшем пароля, использованного для создания файла.Поэтому первое, что я хочу сделать после загрузки, это проверить, совпадает ли предоставленный пароль с зашифрованным.Для этого я снова ввел метод LoadFromFile как функцию, возвращающую код загрузки.Для тестирования сейчас мой файл содержит только 16 байтов для пароля.Я проверил, правильно ли создан MemoryStream.Глядя в локальные переменные, я вижу, что в поток действительно загружено 16 байт.
TEncMemoryStream = class(TMemoryStream)
strict private
PwdMD5: TBytes;
.
.
public
constructor Create;
destructor Destroy;override;
function LoadFromFile(Filename: String;PassWord:String):
TLoadResult;reintroduce;
.
.
function TEncMemoryStream.LoadFromFile(Filename: String;PassWord:String): TLoadResult;
begin
Result := lrLoaded;
try
inherited LoadFromFile(Filename);
ReadBuffer(PwdMD5,16); // <----- here the exception is thrown
except
Result := lrFailed;
end;
if Result = lrLoaded then
if not CheckPassWord(PassWord) then begin
Clear;
Result := lrWrongPwd;
end
end;
Я также пробовал другие функции чтения, они все выдают одну и ту же ошибку (что вполне понятно, поскольку все они в конечном итогевызовите метод TStream.Read).
Кто-нибудь знает, почему выбрасывается это исключение и что я могу сделать, чтобы решить эту проблему?