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} // 全文中的txtContent.Lines.LoadFromFile(fileName)其目的只是为了显示文件修改结果 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
//-------------------1 判断文件是否存在----------------------//
if not FileExists(fileName) then
raise Exception.Create('文件不存在!')
else
//-------------------2 使用FileOpen获取一个文件HANDLE--------//
FFileHandle := FileOPen(fileName,fmOPenReadWrite);
//如果创建文件失败,就抛出一个异常
if FFileHandle = INVALID_HANDLE_VALUE then
raise Exception.Create('打开或创建文件失败!');
//-------------------3 使用CreateFileMapping创建一个刚才用FileOpen创建的HANDLE的文件映射对象-- -//
try
FFileSize := GetFileSize(FFileHandle,nil);
FMapHandle := CreateFileMapping(FFileHandle,nil,PAGE_READWRITE,,FFileSize,nil); if FMapHandle = then
raise Exception.Create('创建内存映射文件失败!');
finally
CloseHandle(FFileHandle);
end;
//-------------------4 使用MapViewOfFile创建一个CreateFileMapping建立的HANDLE的映射文件的视图到 进程的地址空间------//
try
FData := MapViewOfFile(FMapHandle,FILE_MAP_ALL_ACCESS,,,FFileSize);
if FData = nil then
raise Exception.Create('映射文件失败!');
finally
CloseHandle(FMapHandle);
end;
//-------------------5 对MapViewOfFile返回的指针做相应的运算操作------//
try
PData := PChar(FData);
inc(PData,FFileSize);
PData^ := #; if UCase then
StrUpper(PChar(FData))
else
StrLower(PChar(FData));
finally
//-------------------6 取消文件视图的映射------//
UnmapViewOfFile(FData);
end;
txtContent.Lines.Clear();
txtContent.Lines.LoadFromFile(fileName);
end; procedure TForm1.btnCloseClick(Sender: TObject);
begin
Form1.Close();
end; end. {
//-------------------------------------------------------//
在做指针具体运算时,可以采用这样直接获取该指针处的某一类型的值
procedure TForm1.Button1Click(Sender: TObject);
var i: Integer;
p: Pointer;
begin
i := 12345678;
p := @i;
showmessage(inttostr(integer(p))); //俺的电脑上1242664,这是一个地址
showmessage(inttostr(Pinteger(p)^)); //12345678
showmessage(inttostr(PWord(p)^)); //24910
end; Pinteger(p)^表示指针P处取得一个Integer值
PWord(p)^表示指针P处取得一个Word值
在windows.pas和system.pas中还定义了很多指针类型如下
PInteger = ^Integer; {$NODEFINE PInteger} { defined in sysmac.h }
PCardinal = ^Cardinal;
PWord = ^Word;
PSmallInt = ^SmallInt; {$NODEFINE PSmallInt} { defined in sysmac.h }
{$POINTERMATH ON}
PByte = ^Byte; {$NODEFINE PByte} { defined in sysmac.h }
{$POINTERMATH OFF}
PShortInt = ^ShortInt; {$NODEFINE PShortInt} { defined in sysmac.h }
PInt64 = ^Int64; {$NODEFINE PInt64} { defined in sysmac.h }
PUInt64 = ^UInt64;
PLongWord = ^LongWord; {$NODEFINE PLongWord} { defined in sysmac.h }
PSingle = ^Single; {$NODEFINE PSingle} { defined in sysmac.h }
PDouble = ^Double; {$NODEFINE PDouble} { defined in sysmac.h }
PDate = ^Doub

最新文章

  1. url参数中带有+号,服务器端解码之后没了
  2. YII2生成增删改查
  3. Delphi DLL的创建、静态及动态调用
  4. cloudera learning1:cloudera简介及安装
  5. WPF自动隐藏的消息框(鼠标放上去将一直显示,移开动画继续),提供normal和error两种边框。
  6. Mac平台与Windows平台下AndroidStudio增量升级
  7. iOS中的过期方法和新的替代方法
  8. jquery 建议编辑器
  9. UIImage两种初始化的区别
  10. android开源框架android-async-http使用
  11. 如何在一个网站或者一个页面,去书写你的JS代码
  12. em(倍)与px的区别(转载)
  13. HBase MultiVersionConsistencyControl
  14. Xcode 上传代码到GitHub
  15. oracle 选取出现次数最多的前5条数据
  16. MR-join连接
  17. BZOJ3737 : [Pa2013]Euler
  18. 通过python-libvirt管理KVM虚拟机 代码实现
  19. MySQL数据的查询注意
  20. Gym 100633G Nano alarm-clocks

热门文章

  1. linux下打开文件、编辑文本cat\gedit\nano
  2. C# Microsoft.Office不存在空间名称Interop和Excel
  3. cocos源码分析--用Sprite加载自定义着色器
  4. 入坑机器学习?听听MIT在读博士的AI心得
  5. CVPR 2019 | 用异构卷积训练深度CNN:提升效率而不损准确度
  6. Linux交换空间(swap space)
  7. hive使用map字段
  8. day20re模块 正则表达式
  9. is和==的区别
  10. springboot中JPA的应用