Delphi Memory-Mapped File簡單樣本

來源:互聯網
上載者:User

標籤:

{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 = Nil then      raise Exception.Create(‘Failed to map view of file‘);  finally    // Release the file-mapping object handle    CloseHandle(FMapHandle);  end;  try    { !!! Here is where you would place the functions to work with    the mapped file‘s data. For example, the following line forces    all characters in the file to uppercase }    PData := PChar(FData);    // Position the pointer to the end of the file‘s data    inc(PData, FFileSize);    // Append a null-terminating character to the end of the file‘s data    PData^ := #0;    // Now set all characters in the file to uppercase    if UCase then      StrUpper(PChar(FData))    else      StrLower(PChar(FData));  finally    // Release the file mapping.    UnmapViewOfFile(FData);  end;  memTextContents.Lines.Clear;  memTextContents.Lines.LoadFromFile(FName);end;end.

 

Delphi Memory-Mapped File簡單樣本

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.