首页 > 代码库 > Delphi Memory-Mapped File简单示例

Delphi Memory-Mapped File简单示例

{Copyright ?1999 by Delphi 5 Developer‘s Guide - Xavier Pacheco and Steve Teixeira}unit MainFrm;interfaceuses  Windows, Messages, SysUtils, Classes, Graphics, Controls,  Forms, Dialogs, StdCtrls;const  FName = ‘test.txt‘;type  TMainForm = class(TForm)    btnUpperCase: TButton;    memTextContents: TMemo;    lblContents: TLabel;    btnLowerCase: TButton;    procedure btnUpperCaseClick(Sender: TObject);    procedure FormCreate(Sender: TObject);    procedure btnLowerCaseClick(Sender: TObject);  public    UCase: Boolean;    procedure ChangeFileCase;  end;var  MainForm: TMainForm;implementation{$R *.DFM}procedure TMainForm.btnUpperCaseClick(Sender: TObject);begin  UCase := True;  ChangeFileCase;end;procedure TMainForm.btnLowerCaseClick(Sender: TObject);begin  UCase := False;  ChangeFileCase;end;procedure TMainForm.FormCreate(Sender: TObject);begin  memTextContents.Lines.LoadFromFile(FName);  // Change to upper case by default.  UCase := True;end;procedure TMainForm.ChangeFileCase;var  FFileHandle: THandle; // Handle to the open file.  FMapHandle: THandle;  // Handle to a file-mapping object  FFileSize: Integer;   // Variable to hold the file size.  FData: PByte;         // Pointer to the file‘s data when mapped.  PData: PChar;         // Pointer used to reference the file data.begin  { First obtain a file handle to the file to be mapped. This code    assumes the existence of the file. Otherwise, you can use the    FileCreate() function to create a new file. }  if not FileExists(FName) then    raise Exception.Create(‘File does not exist.‘)  else    FFileHandle := FileOpen(FName, fmOpenReadWrite);  // If CreateFile() was not successful, raise an exception  if FFileHandle = INVALID_HANDLE_VALUE then    raise Exception.Create(‘Failed to open or create file‘);  try    { Now obtain the file size which we will pass to the other file-      mapping functions. We‘ll make this size one byte larger as we      need to append a null-terminating character to the end of the      mapped-file‘s data.}    FFileSize := GetFileSize(FFileHandle, Nil);   { Obtain a file-mapping object handle. If this function is not      successful, then raise an exception. }    FMapHandle := CreateFileMapping(FFileHandle, nil,       PAGE_READWRITE, 0, FFileSize, nil);    if FMapHandle = 0 then      raise Exception.Create(‘Failed to create file mapping‘);  finally    // Release the file handle    CloseHandle(FFileHandle);  end;  try    { Map the file-mapping object to a view. This will return a pointer      to the file data. If this function is not successful, then raise      an exception. }    FData := MapViewOfFile(FMapHandle, FILE_MAP_ALL_ACCESS, 0, 0, FFileSize);    if FData = http://www.mamicode.com/Nil then>

 

Delphi Memory-Mapped File简单示例