Модераторы: Poseidon, Snowy, bems, MetalFan
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Как заменить TFileStream на TStringStream, на вход функции подать не файл, а объект 
V
    Опции темы
aleks0506
Дата 29.11.2012, 22:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 2
Регистрация: 29.11.2012

Репутация: нет
Всего: нет



Здравствуйте Уважаемые! Помогите решить, казалось бы, простую задачку:
есть такая библиотека DCPcrypt (для работы с шифрованием), в ней есть функция для шифрования файла, выглядит она так:

function TForm1.EncryptFile(Source, Dest, Password: string): Boolean; 
var
  DCP_rijndael1: TDCP_rijndael;
  SourceStream, DestStream: TFileStream;
begin
  Result := True;
  try
    SourceStream := TFileStream.Create(Source, fmOpenRead);
    DestStream := TFileStream.Create(Dest, fmCreate);
    DCP_rijndael1 := TDCP_rijndael.Create(Self);
    DCP_rijndael1.InitStr(Password, TDCP_sha1);
    DCP_rijndael1.EncryptStream(SourceStream, DestStream, SourceStream.Size);
    DCP_rijndael1.Burn;
    DCP_rijndael1.Free;
    DestStream.Free;
    SourceStream.Free;
  except
    Result := False;
  end;
end;

Все бы хорошо, если бы не одно БОЛЬШОЕ НО - на вход ЭТОЙ функции нужно подавать ФАЙЛ, а мне нужно подать ОБЪЕКТ! (т.к. данные которые нужно зашифровать находятся в объекте TSringList)
я попытался переделать эту функцию с использованием TStringStream - вот что получилось:

function TForm1.EncryptFileToStream(Source, Password: string): Boolean;  
var
  DCP_rijndael1: TDCP_rijndael;
  DestStream: TFileStream;
  stream: TStringStream;
begin
  Result := True;
  try
    DestStream := TFileStream.Create(Source, fmOpenRead);
    stream:=TStringStream.Create('');
      tstTV.SaveToStream(stream); // tstTV это глобальный объект-содержит список строк
      stream.Position := 0; 
    DCP_rijndael1 := TDCP_rijndael.Create(Self);
    DCP_rijndael1.InitStr(Password, TDCP_sha1);
    DCP_rijndael1.EncryptStream(stream, DestStream, stream.Size);
    DCP_rijndael1.Burn;
    DCP_rijndael1.Free;
    stream.Free;
    DestStream.Free;

  except
    Result := False;
  end;
end;

Вроде все правильно! Ошибок не выдает! Код выполняется - но файл даже НЕ СОХРАНЯЕТСЯ...(даже не создается)
(все проверил - данные в объекте tstTV есть(набор строк))

Как думаете, в чем может быть проблема? 
Поделитесь мыслями, умоляю! 

PM MAIL   Вверх
Poseidon
Дата 29.11.2012, 22:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Delphi developer
****


Профиль
Группа: Комодератор
Сообщений: 5273
Регистрация: 4.2.2005
Где: Гомель, Беларусь

Репутация: 53
Всего: 133



Вопрос, зачем шифровать объект?


--------------------
Если хочешь, что бы что-то работало - используй написанное, 
если хочешь что-то понять - пиши сам...
PM MAIL ICQ   Вверх
kami
Дата 29.11.2012, 22:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1806
Регистрация: 25.8.2007
Где: Санкт-Петербург

Репутация: 23
Всего: 72



Цитата(aleks0506 @  29.11.2012,  22:06 Найти цитируемый пост)
 DestStream := TFileStream.Create(Source, fmOpenRead);

Если бы это был SourceStream, то вопросов не было бы. А так:
1. Открытие только на чтение, что автоматически не дает ничего записать в этот файловый поток.
2. Опять-таки, открытие только на чтение - а если файла нет, кто его создаст?

Это сообщение отредактировал(а) kami - 29.11.2012, 22:55
PM MAIL WWW   Вверх
aleks0506
Дата 30.11.2012, 07:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 2
Регистрация: 29.11.2012

Репутация: нет
Всего: нет



Вопрос решен! 
Kami - Огромное СПАСИБО!)

p.s. загвоздка действительно была в том, что открытие файла происходило только на чтение... (стыдно мне - за такую невнимательность)

Это сообщение отредактировал(а) aleks0506 - 30.11.2012, 07:07
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi: Общие вопросы"
SnowyMetalFan
bemsPoseidon
Rrader

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Литературу по Дельфи обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь
  • 90% ответов на свои вопросы можно найти в DRKB (Delphi Russian Knowledge Base) - крупнейшем в рунете сборнике материалов по Дельфи


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Snowy, MetalFan, bems, Poseidon, Rrader.

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Delphi: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0626 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.