TYRANNYSOFT
Воскресенье, 2024-09-08, 4:20 AM



Приветствую Вас Гость | RSS
[ Главная страница ] [ Каталог статей ] [ Регистрация ] [ Вход ]
Меню сайта

Категории каталога
Delphi [11]

Наш опрос
Что бы вы хотели видеть на сайте?

Результаты · Архив опросов

Всего ответов: 160

Начало » Статьи » Программирование » Delphi

Сохранение данных в EXE-файле и изменение их
Например нужна программа по работе с текстовыми файлами.Но меня не устраивает тот вариант,чтобы все текстовые файлы лежали в той же дирректории или даже в отдельной папке,так как и в том и в другом случае не составит труда прочитать их.
Мне нужно,чтобы данные хранились в самом EXE файле(например текстовые файлы).Но тут у меня возник вопрос,а можно ли их будет изменять и сохранять эти изменения в самом EXE файле?Поискал в статьях по этой теме и нашел следующий код,которой в некоторой степени решает эту проблему.В нем данные сохраняются в поток и потом извлекаются из него.А если мне надо сохранить 10 или 100 файлов,то для каждого нужно создать отдельный поток?Посоветуйте может быть есть какой-нибудь другой способ?

function AttachToFile(const AFileName: string; MemoryStream: TMemoryStream): Boolean;
var
aStream: TFileStream;
iSize: Integer;
begin
Result := False;
if not FileExists(AFileName) then
Exit;
try
aStream := TFileStream.Create(AFileName, fmOpenWrite or fmShareDenyWrite);
MemoryStream.Seek(0, soFromBeginning);
// seek to end of File
aStream.Seek(0, soFromEnd);
// copy data from MemoryStream
aStream.CopyFrom(MemoryStream, 0);
// save Stream-Size
iSize := MemoryStream.Size + SizeOf(Integer);
aStream.Write(iSize, SizeOf(iSize));
finally
aStream.Free;
end;
Result := True;
end;

function LoadFromFile(const AFileName: string; MemoryStream: TMemoryStream): Boolean;
var
aStream: TFileStream;
iSize: Integer;
begin
Result := False;
if not FileExists(AFileName) then
Exit;

try
aStream := TFileStream.Create(AFileName, fmOpenRead or fmShareDenyWrite);
// seek to position where Stream-Size is saved
aStream.Seek(-SizeOf(Integer), soFromEnd);
aStream.Read(iSize, SizeOf(iSize));
if iSize > aStream.Size then
begin
aStream.Free;
Exit;
end;
// seek to position where data is saved
aStream.Seek(-iSize, soFromEnd);
MemoryStream.SetSize(iSize - SizeOf(Integer));
MemoryStream.CopyFrom(aStream, iSize - SizeOf(iSize));
MemoryStream.Seek(0, soFromBeginning);
finally
aStream.Free;
end;
Result := True;
end;

procedure TForm1.SaveClick(Sender: TObject);
var
aStream: TMemoryStream;
begin
aStream := TMemoryStream.Create;
Memo1.Lines.SaveToStream(aStream);
AttachToFile('Test.exe', aStream);
aStream.Free;
end;

procedure TForm1.LoadClick(Sender: TObject);
var
aStream: TMemoryStream;
begin
aStream := TMemoryStream.Create;
LoadFromFile('Test.exe', aStream);
Memo1.Lines.LoadFromStream(aStream);
aStream.Free;
end;

end;

Источник: http://www.vr-online.ru/

Категория: Delphi | Добавил: Max (2007-01-05) | Автор: Rain82
Просмотров: 9920 | Рейтинг: 0.0

Всего комментариев: 0
Добавлять комментарии могут только зарегистрированные пользователи.
[ Регистрация | Вход ]
Форма входа

Поиск по каталогу

Друзья сайта

Статистика
Rambler's Top100
Сейчас на сайте:
Онлайн всего: 1
Гостей: 1
Пользователей: 0

Copyright © 2004-2007 TYRANNYSOFT.