⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 filemap.pas

📁 Delphi高级程序开发配书源代码,可以循序渐进的学习Delphi.
💻 PAS
字号:
unit filemap;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls;
const
    fileName = 'myTest.txt';
type
  TForm1 = class(TForm)
    btnUpper: TButton;
    btnLower: TButton;
    txtContent: TMemo;
    Label1: TLabel;
    btnClose: TButton;
    procedure FormCreate(Sender: TObject);
    procedure btnUpperClick(Sender: TObject);
    procedure btnLowerClick(Sender: TObject);
    procedure btnCloseClick(Sender: TObject);
  private
    { Private declarations }
  public
    UCase:Boolean;
    procedure ChangeFileCase;
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.FormCreate(Sender: TObject);
begin
    txtContent.Clear();
    txtContent.Lines.LoadFromFile(fileName);
    //缺省将其转变为大写
    UCase := True;
end;

procedure TForm1.btnUpperClick(Sender: TObject);
begin
    UCase := true;
    ChangeFileCase;
end;

procedure TForm1.btnLowerClick(Sender: TObject);
begin
    UCase := false;
    ChangeFileCase;
end;

procedure Tform1.ChangeFileCase;
var
    FFileHandle : THandle;
    FMapHandle : THandle;
    FFileSize : Integer;
    FData : PByte;
    PData : PChar;
begin
    if not FileExists(fileName) then
        raise Exception.Create('文件不存在!')
    else
        FFileHandle := FileOPen(fileName,fmOPenReadWrite);
    //如果创建文件失败,就抛出一个异常
    if FFileHandle = INVALID_HANDLE_VALUE then
        raise Exception.Create('打开或创建文件失败!');
    try
        FFileSize := GetFileSize(FFileHandle,nil);
        FMapHandle := CreateFileMapping(FFileHandle,nil,PAGE_READWRITE,0,FFileSize,nil);

        if FMapHandle = 0 then
            raise Exception.Create('创建内存映射文件失败!');
    finally
        CloseHandle(FFileHandle);
    end;

    try
        FData := MapViewOfFile(FMapHandle,FILE_MAP_ALL_ACCESS,0,0,FFileSize);
        if FData = nil then
            raise Exception.Create('映射文件失败!');
    finally
        CloseHandle(FMapHandle);
    end;

    try
        PData := PChar(FData);
        inc(PData,FFileSize);
        PData^ := #0;

        if UCase then
            StrUpper(PChar(FData))
        else
            StrLower(PChar(FData));
    finally
        UnmapViewOfFile(FData);
    end;
    txtContent.Lines.Clear();
    txtContent.Lines.LoadFromFile(fileName);
end;

procedure TForm1.btnCloseClick(Sender: TObject);
begin
    Form1.Close();
end;

end.

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -