Недавно добавленные исходники

•  DeLiKaTeS Tetris (Тетрис)  3 813

•  TDictionary Custom Sort  5 919

•  Fast Watermark Sources  5 722

•  3D Designer  8 503

•  Sik Screen Capture  6 058

•  Patch Maker  6 500

•  Айболит (remote control)  6 491

•  ListBox Drag & Drop  5 352

•  Доска для игры Реверси  95 040

•  Графические эффекты  6 692

•  Рисование по маске  5 827

•  Перетаскивание изображений  4 875

•  Canvas Drawing  5 249

•  Рисование Луны  4 971

•  Поворот изображения  4 521

•  Рисование стержней  3 201

•  Paint on Shape  2 446

•  Генератор кроссвордов  3 318

•  Головоломка Paletto  2 630

•  Теорема Монжа об окружностях  3 422

•  Пазл Numbrix  2 258

•  Заборы и коммивояжеры  2 917

•  Игра HIP  1 885

•  Игра Go (Го)  1 802

•  Симулятор лифта  2 141

•  Программа укладки плитки  1 867

•  Генератор лабиринта  2 307

•  Проверка числового ввода  1 993

•  HEX View  2 304

•  Физический маятник  1 964

 
скрыть

  Форум  

Delphi FAQ - Часто задаваемые вопросы

| Базы данных | Графика и Игры | Интернет и Сети | Компоненты и Классы | Мультимедиа |
| ОС и Железо | Программа и Интерфейс | Рабочий стол | Синтаксис | Технологии | Файловая система |



Delphi Sources

Сохранение бинарного файла в реестре с последующим его извлечением



Автор: Sergey

{ **** UBPFD *********** by delphibase.endimus.com ****
>> Сохранение бинарного файла в реестре с последующим его извлечением

Функции позволяют разбить файл на блоки 16к и затем поместить бинарные
данные в реестр, а так же собрать эти данные обратно в файл при необходимости.
Не знаю зачем этот код нужен , но возможно он пригодится для скрытого
хранения данных . Не рекомендуется (!) сохранять слишком большие файлы
в реестре , потому что размеры реестра ограничены .

Зависимости: Registry,SysUtils
Автор:       Sergey, gloom@imail.ru, Koenigsberg
Copyright:   KosilkA
Дата:        4 декабря 2003 г.
***************************************************** }

//////////////////////////////////////////////////
// функция разбивки и сохранения файла в реестр:

function SaveToRegistry(RootKey: HKEY; FileName, KeyName: string): Bool;
//где RootKey-раздел реестра,
//FileName-путь к файлу ,
//KeyName-ключ реестра в который будем сохранять
var
  FromF: file;
  NumRead, i: Integer;
  Buf: array[0..16383] of byte;
  reg: tregistry;
begin
  try
    AssignFile(FromF, filename);
    Reset(FromF, 1);
    reg := tregistry.Create;
    reg.RootKey := rootkey;
    if reg.OpenKey(keyName, true) = false then //если невозможно
      //открыть ключ с правами
      //записи , то что то не так
    begin
      result := false;
      reg.Free;
      exit; //выходим
    end;
    i := 0;
    repeat //читаем и записывае в цикле
      BlockRead(FromF, Buf, SizeOf(Buf), NumRead); //читаем блок из файла
      if numread <> 0 then
      begin
        reg.WriteBinaryData(inttostr(i), buf, numread); //сохраняем блок в реестр
        inc(i);
      end;
    until (NumRead = 0);
    CloseFile(FromF);
    reg.CloseKey;
    reg.Free;
    result := true;
  except
    reg.CloseKey;
    reg.Free;
    result := false;
  end;
end;

//////////////////////////////////////////////////
// функция сборки сохраненного файла:

function BuildFromRegistry(RootKey: HKEY; KeyName, ToFileName: string): Bool;
//где RootKey-раздел реестра,
//KeyName -ключ реестра ,
//ToFileName-имя выходного файла .
var
  numwritten, i: integer;
  ToF: file;
  Buf: array[0..16383] of byte;
  reg: tregistry;
begin
  try
    AssignFile(ToF, tofilename);
    Rewrite(ToF, 1);
    reg := tregistry.Create;
    reg.RootKey := rootkey;
    if reg.OpenKey(keyname, true) = false then
      //если указанный ключ невозможно открыть - выходим
    begin
      result := false;
      reg.Free;
      exit;
    end;
    i := 0;
    repeat
      //в цикле находим значения
      //начиная с "0" , читаем их
      //и добавляем блоки к файлу
      if reg.ValueExists(inttostr(i)) = true then
      begin
        reg.ReadBinaryData(inttostr(i), buf, reg.GetDataSize(inttostr(i)));
        BlockWrite(ToF, Buf, reg.GetDataSize(inttostr(i)));
      end;
      inc(i);
    until reg.ValueExists(inttostr(i)) = false;
    CloseFile(ToF);
    reg.CloseKey;
    reg.Free;
    result := true;
  except
    reg.CloseKey;
    reg.Free;
    result := false;
  end;
end;

// Пример использования:

// сохранить:
SaveToRegistry(HKEY_CURRENT_USER, Application.ExeName, '\Software\MyData\test');

// извлечь:
BuildFromRegistry(HKEY_CURRENT_USER, '\Software\MyData\test', 'MyBuildApp.exe');




Похожие по теме исходники

Разбиение файла на части

Текст внутри файла

A Star (нахождение кратчайшего пути)

Нахождение кратчайшего пути

 

Облако тегов

Дейкстра: поиск кратчайшего пути




Copyright © 2004-2025 "Delphi Sources" by BrokenByte Software. Delphi World FAQ

Группа ВКонтакте