Карта сайта Kansoftware
НОВОСТИУСЛУГИРЕШЕНИЯКОНТАКТЫ
KANSoftWare

Отображаемый в память файл – записать и считать информацию

Delphi , Файловая система , Файлы

Отображаемый в память файл – записать и считать информацию

unit MMapForm;

interface

uses
  Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
  StdCtrls;

type
  TForm1 = class(TForm)
    BtnWrite: TButton;
    EditWrite: TEdit;
    BtnRead: TButton;
    EditRead: TEdit;
    procedure FormCreate(Sender: TObject);
    procedure FormDestroy(Sender: TObject);
    procedure BtnWriteClick(Sender: TObject);
    procedure BtnReadClick(Sender: TObject);
  private
    hMapFile: THandle;
    MapFilePointer: Pointer;
  public
    { Public declarations }
  end;

var
  Form1: TForm1;

implementation

{$R *.DFM}

procedure TForm1.FormCreate(Sender: TObject);
begin
  hMapFile := CreateFileMapping(
    $FFFFFFFF, // file handle ... or memory
    nil, // security
    Page_ReadWrite, // access rights
    0, // high memory size
    10000, // low memory size
    'DdhDemoMappedFile'); // mapped file name
  if hMapFile <> 0 then
    MapFilePointer := MapViewOfFile(
      hMapFile, // handle returned above
      File_Map_All_Access, // access rights
      0, 0, 0) // access the entire mapped file
  else
    ShowMessage('hMapFile = 0');
  if MapFilePointer = nil then
    ShowMessage('MapFilePointer = nil');
end;

procedure TForm1.FormDestroy(Sender: TObject);
begin
  UnMapViewOfFile(MapFilePointer);
  CloseHandle(hMapFile);
end;

procedure TForm1.BtnWriteClick(Sender: TObject);
begin
  StrCopy(PChar(MapFilePointer),
    PChar(EditWrite.Text));
end;

procedure TForm1.BtnReadClick(Sender: TObject);
var
  S: string;
begin
  S := PChar(MapFilePointer);
  EditRead.Text := S;
end;

end.

Перевод контента на русский язык:

Это проект Delphi, демонстрирующий использование файлов памяти (MMFs) в программировании Windows. Цель этого проекта - создать форму с двумя кнопками: "Write" и "Read". Когда пользователь нажимает кнопку "Write", она записывает текст из редактора на MMF. Когда пользователь нажимает кнопку "Read", она читает содержимое MMF и отображает его в другом редакторе.

Вот разбивка кода:

Форма Проект имеет единственную форму (TForm1) с двумя кнопками (BtnWrite и BtnRead), двумя редакторами (EditWrite и EditRead) и некоторыми приватными переменными. Форма имеет четыре процедуры: FormCreate, FormDestroy, BtnWriteClick и BtnReadClick.

Создание MMF В процедуре FormCreate программа создает файл памяти, используя функцию CreateFileMapping. Она указывает файловый.handle ($FFFFFFFF), атрибуты безопасности (nil), права доступа (Page_ReadWrite), высокую память (0), низкую память (10000) и имя файла памяти ('DdhDemoMappedFile'). Если создание успешно, она maps вид файла, используя MapViewOfFile. Переменная MapFilePointer содержит указатель на начало файла.

Уничтожение MMF В процедуре FormDestroy программа unmasks вид файла, используя UnMapViewOfFile, и закрывает handle, используя CloseHandle.

Запись данных в MMF В процедуре BtnWriteClick, когда пользователь нажимает кнопку "Write", она копирует текст из редактора EditWrite в MapFilePointer, используя StrCopy. Это записывает текст в MMF.

Чтение данных из MMF В процедуре BtnReadClick, когда пользователь нажимает кнопку "Read", она читает содержимое MMF, копируя данные на MapFilePointer в строковую переменную S, и затем устанавливает текст редактора EditRead на это значение.

Рекомендации 1. Обработка ошибок: программа не обрабатывает ошибки должным образом. Например, если создание или маппинг файла fails, она отображает сообщение об ошибке с помощью ShowMessage. Лучше использовать блоки try-except для ловли и обработки исключений. 2. Управление памятью: программа использует raw pointers (MapFilePointer) для доступа к MMF. Это может привести к утечкам памяти или коррупции, если не используется правильно. Рекомендуется использовать управляемые типы, такие как TMemoryStream или TBytes, вместо. 3. Производительность: MMFs предназначены для больших файлов, но в этом примере они используются с маленьким размером файла (10000 байт). Для меньших файлов другие подходы могут быть более эффективными.

В целом, код демонстрирует, как создавать и использовать MMF в Delphi, но может улучшиться в обработке ошибок, управлении памятью и производительности.

В статье описывается пример использования функции CreateFileMapping для создания отображаемого в память файла и записи/чтения информации из него с помощью операций MapViewOfFile и UnMapViewOfFile.


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

Получайте свежие новости и обновления по Object Pascal, Delphi и Lazarus прямо в свой смартфон. Подпишитесь на наш Telegram-канал delphi_kansoftware и будьте в курсе последних тенденций в разработке под Linux, Windows, Android и iOS




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


:: Главная :: Файлы ::


реклама


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

Время компиляции файла: 2024-08-19 13:29:56
2024-11-21 12:07:29/0.0056278705596924/1