Карта сайта Kansoftware
НОВОСТИУСЛУГИРЕШЕНИЯКОНТАКТЫ
Разработка программного обеспечения
KANSoftWare

TStringGrid и файловый поток

Delphi , Компоненты и Классы , TStringGrid и TDrawGrid

TStringGrid и файловый поток

- Хотел бы я на "винте" столько места, чтобы на него влез двухсот гигабайтный своп-файл!
- Зачем тебе такой большой своп?!!
- Да не нужен мне такой своп! Просто хотелось бы столько места!..

Какое наилучшее решение для сохранения экземпляра TStringGrid (150x10)?

Если вы хотите сохранить это на диске:


var:
  myStream: TFileStream;
begin
  myStream1 := TFileStream.Create('grid1.sav', fmCreate);
  myStream1.WriteComponent(StringGrid1);
  myStream1.Destroy;
end;

Для обратного чтения:


myStream    := TFileStream.Create('grid1.sav', fmOpenRead);
StringGrid1 := myStream1.ReadComponent(StringGrid1) as TStringGrid;

Here's the translation of the content into Russian:

Классическая проблема!

Текущий подход не подходит для больших файлов, таких как файл обмена размером 200 ГБ (хотя бы и если было возможно хранить такой огромный файл в памяти, методы TFileStream и WriteComponent/ReadComponent могут быть неэффективными или не надежными).

Для хранения меньшего экземпляра TStringGrid (150x10) у вас есть несколько вариантов:

  1. Сериализация XML: вы можете использовать встроенные функции сериализации XML Delphi для хранения данных грида в файле XML. Это относительно лёгкое и легко реализуемое решение.
uses
  XmlSerializer;

procedure SaveGridToXML;
var
  xmlStream: TMemoryStream;
begin
  xmlStream := TMemoryStream.Create;
  try
    XmlSerializer1.SaveToStream(StringGrid1, xmlStream);
    xmlStream.SaveToFile('grid1.xml');
  finally
    xmlStream.Free;
  end;
end;

procedure LoadGridFromXML;
var
  xmlStream: TMemoryStream;
begin
  xmlStream := TMemoryStream.Create;
  try
    xmlStream.LoadFromFile('grid1.xml');
    StringGrid1 := XmlSerializer1.LoadFromStream(xmlStream);
  finally
    xmlStream.Free;
  end;
end;
  1. Бинарная сериализация: вы можете использовать методы WriteComponent/ReadComponent, но с более эффективным бинарным форматом.
uses
  Classes;

procedure SaveGridToBinFile;
var
  stream: TFileStream;
begin
  stream := TFileStream.Create('grid1.bin', fmCreate);
  try
    StringGrid1.WriteComponent(stream);
  finally
    stream.Free;
  end;
end;

procedure LoadGridFromBinFile;
var
  stream: TFileStream;
begin
  stream := TFileStream.Create('grid1.bin', fmOpenRead);
  try
    StringGrid1 := stream.ReadComponent as TStringGrid;
  finally
    stream.Free;
  end;
end;
  1. Кастомная бинарная форма: вы можете создать кастомную бинарную форму для хранения данных грида, которая может быть более эффективной, чем использовать WriteComponent/ReadComponent. Это требует больше усилий и экспертизы.

Для больших файлов вам может потребоваться рассмотреть использование базы данных или более robust хранения, которое предназначено для обработки больших объемов данных.

Никогда не забывайте освобождать память и файловые потоки, когда вы закончите с ними, чтобы избежать утечек памяти!

В статье рассматривается вопрос о том, как сохранить экземпляр компонента TStringGrid на диске с помощью потока TFileStream и обратно прочитать его.


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


Ваше мнение или вопрос к статье в виде простого текста (Tag <a href=... Disabled). Все комментарии модерируются, модератор оставляет за собой право удалить непонравившейся ему комментарий.

заголовок

e-mail

Ваше имя

Сообщение

Введите код




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



:: Главная :: TStringGrid и TDrawGrid ::


реклама



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

Время компиляции файла: 2024-05-19 17:53:24
2024-05-19 22:54:20/0.0046641826629639/2