Карта сайта Kansoftware
НОВОСТИУСЛУГИРЕШЕНИЯКОНТАКТЫ
KANSoftWare

Сохранить несколько потоков в сжатый зашифрованный файл

Delphi , Компоненты и Классы , Потоки

Сохранить несколько потоков в сжатый зашифрованный файл

Оформил: DeeCo
Автор: http://www.swissdelphicenter.ch

{ 
 This example shows you how to save many streams into a single file and load it again. 
 You need to install the HKStream component from the Demo-Download. 
 The HKStreams component enables you to store streams with LHA compression if wanted, 
 and can also be  encrypted with blowfish. 
 THKStreams is also smart, if you load afterwards an encrypted or compressed (or both) file, 
 it will now how to read it, and can also call your event that asks the user 
 for a password if needed. 

 In the following example we will store several components 
 (TMemo, TListbox, some other controls) 
 and a Version-Information in a single file and then read it back. 

 THKStreams enables you to write your own file format and easily access streams 
 in a file, as they are stored in different sections. 
}

 { 
 Dieses Beispiel zeigt, wie man mehrere Stream in eine Datei speichern kann. 
 Dafur wird die THKStreams Komponente verwendet, welche es unter anderem erlaubt, 
 eine Datei mit LHA zu komprimieren und mit Blowfish zu verschlussseln. 
 Auch kann einer Datei ein Passwort hinzugefugt werden, welches dann beim Offnen 
 der Datei vom Benutzer eingegeben werden muss. 

 Im Beispiel werden einige Komponenten wie TMemo, TListbox und diverse Controls einer 
 Groupbox und Versions-Informationen in einer einzigen Datei gespeichert. 

 Mit der THKStreams Komponente kann man leicht sein eigenes Dateiformat schreiben und 
 sehr einfach auf Streams zugreifen, da diese in einzelne Sektionen unterteilt sind. 
}

 uses
   HKStreamCol; { from Demo-Download }

 private
     { Private declarations }
     function SaveHKFile(FileName: TFileName): boolean;
     function LoadHKFile(FileName: TFileName): boolean;
   public
     { Public declarations }
   end;

 implementation

 {$R *.dfm}

 //-------------------------------------------------------- 
// Save our File 
function TfrmMain.SaveHKFile(FileName: TFileName): Boolean;
 //-------------------------------------------------------- 
var
   ms: TMemoryStream;
   i: integer;
   s: string;
   StrList: TStringList;
 begin
   ms := TMemoryStream.Create;
   try
     with HKStreams1 do
     begin
       // Version Info 
      //-------------------------------- 
      i := 1;
       ms.Write(I, SizeOf(I));
       AddStream('Version-Info', ms);
       ms.Clear;
       // Author Info 
      //-------------------------------- 
      s := 'Your Name';
       ms.WriteBuffer(s[1], Length(s));
       AddStream('Author-Info', ms);
       ms.Clear;
       // Memo1 
      //-------------------------------- 
      Memo1.Lines.SaveToStream(ms);
       AddStream('Memo1', ms);
       ms.Clear;
       // ListBox1 
      //------------------------------- 
      ListBox1.Items.SaveToStream(ms);
       AddStream('ListBox1', ms);
       ms.Clear;
       // Different Controls on Groupbox1 
      //------------------------------- 
      // Look at the Demo for GetSettings implementation 
      StrList := TStringList.Create;
       try
         GetSettings(StrList, GroupBox1);
         StrList.SaveToStream(ms);
       finally
         StrList.Free;
       end;
       AddStream('Settings', ms);
       ms.Clear;
       // Save everything 
      // ----------------------------- 
      SaveToFile(FileName);
       ClearStreams;
     end; {with}
   finally
     ms.Free;
   end;
 end;

 //-------------------------------------------------------- 
// Load our File 
function TfrmMain.LoadHKFile(FileName: TFileName): Boolean;
 //-------------------------------------------------------- 
var
   ms: TMemoryStream;
   i: Integer;
   s: string;
   StrList: TStringList;
 begin
   if not FileExists(FileName) then
   begin
     ShowMessage('File not found');
     // Customize Error handling... 
    Exit;
   end;
   try
     HKStreams1.LoadFromFile(FileName);
   except
     on ECorruptFile do Exit;
     on EStreamError do Exit;
   end;
   ms := TMemoryStream.Create;
   try
     with HKStreams1 do
     begin
       // Version Info 
      //-------------------------------- 
      GetStream('Version-Info', ms);
       ms.read(i, SizeOf(i));
       label1.Caption := 'Version: ' + IntToStr(i);
       ms.Clear;
       // Author Info 
      //-------------------------------- 
      GetStream('Author-Info', ms);
       SetLength(S, ms.Size);
       ms.read(S[1], ms.Size);
       Label2.Caption := 'Author: ' + s;
       ms.Clear;
       // Memo1 
      //-------------------------------- 
      GetStream('Memo1', ms);
       Memo1.Lines.LoadFromStream(ms);
       ms.Clear;
       // ListBox1 
      //------------------------------- 
      GetStream('ListBox1', ms);
       ListBox1.Items.LoadFromStream(ms);
       ms.Clear;
       // Different Controls on Groupbox1 
      //------------------------------- 
      // Look at the Demo for SetSettings implementation 
      GetStream('Settings', ms);
       StrList := TStringList.Create;
       try
         StrList.LoadFromStream(ms);
         SetSettings(StrList);
       finally
         StrList.Free;
       end;
       { ----------------------------- }
       ClearStreams;
     end; {with}
   finally
     ms.Free;
   end;
 end;

 //-------------------------------------------------------- 
// Save Dialog 
procedure TfrmMain.btnSaveClick(Sender: TObject);
 //-------------------------------------------------------- 
begin
   if SaveDialog1.Execute then
   begin
     SaveHKFile(SaveDialog1.FileName);
   end;
   // Clear controls 
  ListBox1.Clear;
   Memo1.Clear;
   Edit1.Clear;
   Edit2.Clear;
   Edit3.Clear;
   Edit4.Clear;
   CheckBox1.Checked := not CheckBox1.Checked;
   CheckBox2.Checked := not CheckBox2.Checked;
 end;

 //-------------------------------------------------------- 
// Open Dialog 
procedure TfrmMain.btnLoadClick(Sender: TObject);
 //-------------------------------------------------------- 
begin
   if OpenDialog1.Execute then
   begin
     LoadHKFile(OpenDialog1.FileName);
   end;
 end;

Эта программа на Delphi демонстрирует, как сохранять несколько потоков данных (например, компоненты, текст и настройки) в одном файле с помощью компонента HKStreams. Программа позволяет сохранять и загружать файлы с возможной компрессией и шифрованием.

Вот разбивка кода:

SaveHKFile

  • Создает объект TMemoryStream (ms) для хранения потоков.
  • Записывает информацию о версии (целочисленное значение), авторе (строка) и настройки из различных компонентов (например, Memo1, ListBox1, GroupBox1) в отдельных потоках с помощью AddStream.
  • Очищает каждый поток после записи.
  • Сохраняет все потоки в файл с помощью SaveToFile.

LoadHKFile

  • Проверяет, существует ли файл; если нет, отображает сообщение об ошибке и выходит.
  • Загружает файл с помощью LoadFromFile из HKStreams1.
  • Получает каждый поток обратно с помощью GetStream.
  • Читает информацию о версии, авторе, настройках и других данных из потоков.
  • Попulates соответствующие компоненты загруженными данными.

btnSaveClick

  • Открывает диалоговое окно "Сохранить"; если нажать OK, вызывает SaveHKFile с выбраным именем файла.

btnLoadClick

  • Открывает диалоговое окно "Открыть"; если нажать OK, вызывает LoadHKFile с выбраным именем файла.

Программа обеспечивает основное обслуживание ошибок для операций с файлами. Вы можете настроить это как вам нужно.

В целом, этот код демонстрирует, как использовать HKStreams для хранения и загрузки нескольких потоков данных в одном файле с возможной компрессией и шифрованием.

Сохранить несколько потоков в сжатый зашифрованный файл и загрузить их обратно для последующей работы.


Комментарии и вопросы

Получайте свежие новости и обновления по Object Pascal, Delphi и Lazarus прямо в свой смартфон. Подпишитесь на наш Telegram-канал delphi_kansoftware и будьте в курсе последних тенденций в разработке под Linux, Windows, Android и iOS




Материалы статей собраны из открытых источников, владелец сайта не претендует на авторство. Там где авторство установить не удалось, материал подаётся без имени автора. В случае если Вы считаете, что Ваши права нарушены, пожалуйста, свяжитесь с владельцем сайта.


:: Главная :: Потоки ::


реклама


©KANSoftWare (разработка программного обеспечения, создание программ, создание интерактивных сайтов), 2007
Top.Mail.Ru

Время компиляции файла: 2024-12-22 20:14:06
2025-01-29 03:46:52/0.0035979747772217/0