Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

Восстановить пароль

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 05.08.2014, 14:21   #1
Shouldercannon
Участник клуба Подтвердите свой е-майл
 
Аватар для Shouldercannon
 
Регистрация: 26.01.2008
Сообщений: 1,899
Сообщение Получить Hash несуществующего файла

Доброго времени суток!
Пытаюсь получить hash несуществующего файла (может быть такой случай если проверяешь много файлов)
Код:
procedure TFormMain.Button1Click(Sender: TObject);
var
  MD5: TIdHashMessageDigest5;
  FS: TFileStream;
begin
  try
    MD5 := TIdHashMessageDigest5.Create;
    try
      FS := TFileStream.Create(ExtractFilePath(Application.ExeName) + 'bla.txt', fmOpenRead or fmShareDenyNone);
      if not (MD5.AsHex(MD5.HashValue(FS)) = '2FF496056906758C3486677AE42DE365') then ShowMessage('Не совпадает');
    except
    end;
  finally
    FreeAndNil(MD5);
    FreeAndNil(FS); // Если закомментировать, то ошибки нет
  end;
end;
Получаю ошибку из-за
Код:
FreeAndNil(FS);
Или лучше сделать дополнительные действия, например, проверить существуют ли файлы, а потом только проверять их hash?
Изображения
Тип файла: png Безымянный.png (5.7 Кб, 70 просмотров)
Shouldercannon вне форума Ответить с цитированием
Старый 05.08.2014, 14:41   #2
alextrof94
Форумчанин
 
Регистрация: 16.03.2013
Сообщений: 599
По умолчанию

Так у вас FS пустой, а вы его еще и освободить пытаетесь, при этом ошибка открытия FS пропадает в пустом except-end;
Код:
procedure TFormMain.Button1Click(Sender: TObject);
var
  MD5: TIdHashMessageDigest5;
  FS: TFileStream;
begin
  try
    MD5 := TIdHashMessageDigest5.Create;
    FS := TFileStream.Create(ExtractFilePath(Application.ExeName) + 'bla.txt', fmOpenRead or fmShareDenyNone);
    if not (MD5.AsHex(MD5.HashValue(FS)) = '2FF496056906758C3486677AE42DE365') then ShowMessage('Не совпадает');
    FreeAndNil(MD5);
    FreeAndNil(FS);
  except on E : Exception do
      // тут можно сделать конструкцию вида "если ошибка не равна ОТСУТСТВУЕТ ФАЙЛ - покажи мессагу"
      ShowMessage(E.ClassName+' ошибка с сообщением : '+E.Message);
  end; // не помню нужен или нет
end;
alextrof94$gmail.com
alextrof94 вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Hash в Delphi bilibian Общие вопросы Delphi 9 25.02.2014 17:33
hash Вкотакте Кольша Свободное общение 4 21.04.2012 19:51
hash-функции, md-5 may17 Помощь студентам 1 03.04.2012 20:35
получить hash в контакте fate Работа с сетью в Delphi 3 06.06.2011 15:59
Получить hash (idhttp post) Lime Работа с сетью в Delphi 1 18.09.2009 08:35