Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Delphi: Общие вопросы > Хранение данных


Автор: former 1.4.2006, 20:47
Как сохранять в файле со своим расширением данные, содержащие картинку (Jpeg) и текст (не архив)? Картинка не должна отображаться с помощью других программ.

Автор: Демо 1.4.2006, 21:08
У TJPEGImage есть метод SaveToStream.
Копируй в TMemoryStream, изменяй по своему алгоритму и сохраняй на диск.
ПРи загрузке проделывай обратную операцию.

Автор: former 1.4.2006, 22:38
То, что JPEG можно сохранить через поток, я знаю. Но как запихнуть туда ещё текст (например записи)? Хотелось бы увидеть пример с бинарным файлом. smile

Автор: Демо 1.4.2006, 23:25
Цитата(former @ 1.4.2006, 22:38 Найти цитируемый пост)
Но как запихнуть туда ещё текст (например записи)?


Да очень просто.

Код

procedure SaveData(const s: String; BinData: TStream; FilePath: String);
var
  FS: TFileStream;
  Len: Integer;
  Len64: Int64;
begin
  FS := TFileStream.Create(FilePath,fmCreate);
  try
    Len := Length(s);
    FS.Write(Len,SizeOf(Integer));
    FS.Write(s[1],Len);
    Len64 := BinData.Size;
    FS.Write(Len64,SizeOf(Int64));
    FS.CopyFrom(BinData,Len64);
  finally
    FS.Free;
  end;
end;

procedure ReadData(var s: String; BinData: TStream; FilePath: String);
var
  FS: TFileStream;
  Len: Integer;
  Len64: Int64;
begin
  FS := TFileStream.Create(FilePath,fmOpenRead);
  try
    FS.Read(Len,SizeOf(Integer));
    SetLength(s,Len);
    FS.Read(s[1],Len);
    FS.Read(Len64,SizeOf(Int64));
    BinData.CopyFrom(FS,Len64);
  finally
    FS.Free;
  end;
end;



Пример сохранения:

Код

procedure TForm1.Button1Click(Sender: TObject);
var
  FS: TFileStream;
begin
  FS := TFileStream.Create('unit1.pas',fmOpenRead);
  try
    SaveData('Это коммент',FS,'BinData.dat');
  finally
    FS.Free;
  end;
end;



Пример восстановления:

Код

procedure TForm1.Button2Click(Sender: TObject);
var
  MS: TMemoryStream;
  s: String;
begin
  MS:= TMemoryStream.Create;
  try
    ReadData(s,MS,'BinData.dat');
//Здесь исполльзуем загруженные данные
  finally
    MS.Free;
  end;
end;



Автор: former 3.4.2006, 15:10
Демо, спасибо.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)