delphi 大文件的读写 使用 MapviewOffile
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
delphi 大文件的读写 使用 MapviewOffile的更多相关文章
- java filechannel大文件的读写
java读取大文件 超大文件的几种方法 转自:http://wgslucky.blog.163.com/blog/static/97562532201332324639689/ java 读取一个 ...
- Delphi对于文件的读写操作
delphi文件操作 取文件名 ExtractFileName(FileName); 取文件扩展名: ExtractFileExt(filename); 取文件名,不带扩展名: 方法一: Functi ...
- 关于使用MAPVIEWOFFILE大文件的读写(DELPHI版)
unit filemap; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, For ...
- Delphi 中内存映射对于大文件的使用
这篇文章主要介绍了Delphi 中内存映射对于大文件的使用的相关资料,希望通过本文能帮助到大家,需要的朋友可以参考下 Delphi 中内存映射对于大文件的使用 平时很少使用大文件的内存映射,碰巧遇到了 ...
- Mac技巧之让U盘、移动硬盘在苹果电脑和Windows PC都能识别/读写,且支持4GB大文件:exFAT格式
如果您的 U 盘.移动硬盘既要用于 PC 又要用于苹果电脑,Mac OS X 系统的 HFS+ 和 Windows 的 NTFS 格式显然都不行……HFS+ 在 Windows 下不识别,NTFS 格 ...
- 用MapViewOfFile处理大文件-内存不足
用MapViewOfFile处理大文件时,如果文件过大,如400M,则无法一次性映射入内存,否则会出现1132错误,即内存不足.原因可能为操作系统无法找到连续的内存.因此需要通过分页的方式,逐页将文件 ...
- 读写文件:每次读入大文件里的一行、读写.CSV文件
读文件: 传统的读法.所有读出,按行处理: fp=open("./ps.txt", "r"); alllines=fp.readlines(); fp.clos ...
- 【JavaNIO的深入研究4】内存映射文件I/O,大文件读写操作,Java nio之MappedByteBuffer,高效文件/内存映射
内存映射文件能让你创建和修改那些因为太大而无法放入内存的文件.有了内存映射文件,你就可以认为文件已经全部读进了内存,然后把它当成一个非常大的数组来访问.这种解决办法能大大简化修改文件的代码.fileC ...
- 【基础巩固】文件流读写、大文件移动 FileStream StreamWriter File Path Directory/ ,m资料管理器(递归)
C#获取文件名 扩展名 string fullPath = @"d:\test\default.avi"; string filename = Path.GetFileName(f ...
随机推荐
- Solr字段类型field type的定义
摘要: Solr的字段类型定义了Solr如何解析字段数据并将数据检索出来,了解Solr的字段类型定义有助于更好的配置与使用Solr. 字段类型的定义 字段类型的定义主要包含如下四个方面的信息: 名称 ...
- solr学习之域的管理与中文分析器配置
该文使用 Centos6.5 64 位 solr4.10.3 IK-Analyzer中文分析器 一.solr域 在solr中域的概念与lucene中域的概念相同,数据库的一条记录或者一个文 ...
- virtualenv与virtualenvwrapper讲解
#现在有个需求,我现在有两个项目,一个得运行于django1.1.11 ,还有一个版本得跑在django2.0上 python3 manage.py runserver 0.0.0.0:8000 ...
- C# WPF DevExpress 图表控件之柱状图
说明:DevExpress版本是17.1.VS是2015. XAML: <!--#region 图表控件--> <dxc:ChartControl x:Name="char ...
- 【Selenium-WebDriver问题篇】Selenium实现元素的拖拽(java版)(转)
https://blog.csdn.net/u010503127/article/details/51381284 Selenium实现元素的拖拽(java版) [前言] 自从淘宝网登陆页出现滑块验证 ...
- 剑指Offer(三):从尾到头打印链表
说明: 1.本系列是根据<剑指Offer>这个系列做的一个小笔记. 2.直接动力是因为师兄师姐找工作很难,而且机械出生的我面试算法更难. 3.刚开始准备刷LeetCode.LintCode ...
- [Unity插件]Lua行为树(三):组合节点Sequence
Sequence的继承关系如下: Sequence->Composite->ParentTask->Task 上一篇已经实现了简单版本的ParentTask和Task(基于Behav ...
- sql server转oracle需要注意的几点
1. 字符型的字段相加需要用“||”,如果用“+”的话,会报“无效的数字”的错误. 2. Top 1 类似的脚本需要通过where rownum<=1来实现. 3. ISNULL函 ...
- 8.Appium的基本使用-1
1.Appium是什么?Appium是一个跨平台移动端自动化测试工具,可以便捷的为ios和Android平台创建自动化测试用例.模拟app内部各种操作,点击.滑动.文本输入等,手工操作的动作appiu ...
- 32.纯 CSS 创作六边形按钮特效
原文地址:https://segmentfault.com/a/1190000015020964 感想:简简单单的动画特效,位置,动画. HTML代码: <nav> <ul> ...