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

•  DeLiKaTeS Tetris (Тетрис)  4 062

•  TDictionary Custom Sort  6 162

•  Fast Watermark Sources  5 957

•  3D Designer  8 832

•  Sik Screen Capture  6 303

•  Patch Maker  6 716

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

•  ListBox Drag & Drop  5 561

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

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

•  Рисование по маске  6 170

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

•  Canvas Drawing  5 466

•  Рисование Луны  5 179

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

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

•  Paint on Shape  2 573

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

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

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

•  Пазл Numbrix  2 342

•  Заборы и коммивояжеры  3 026

•  Игра HIP  1 982

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

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

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

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

•  Проверка числового ввода  2 099

•  HEX View  2 428

•  Физический маятник  2 055

 
скрыть

  Форум  

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

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