For 32位程序
function MoveLast10ToFirst(Const sFile : String) : Boolean;
var
hFile , hMap : THandle;
dwSize , dwHigh : DWORD;
pBuf : Pointer;
Buf : array [0..9] of Byte;
begin
Result := False;
hFile := CreateFile(PChar(sFile) , GENERIC_READ or GENERIC_WRITE,
FILE_SHARE_READ or FILE_SHARE_WRITE,
nil, OPEN_ALWAYS,
FILE_ATTRIBUTE_NORMAL , 0);
if hFile=INVALID_HANDLE_VALUE then exit;
dwSize := GetFileSize(hFile , @dwHigh);
if (dwSize < 10) or (dwHigh<>0) then begin //文件小于10或者大于4G,暂时放弃
CloseHandle(hFile);
exit;
end;
hMap := CreateFileMapping(hFile , NIL , PAGE_READWRITE , 0 , dwSize , NIL);
if hMap=0 then begin
CloseHandle(hFile);
exit;
end;
pBuf := MapViewOfFile(hMap , FILE_MAP_READ or FILE_MAP_WRITE , 0 , 0 , 0);
if pBuf<>NIL then begin
//将最后10字节保存到临时Buf中
Move(Pointer(DWORD(pBuf) + dwSize - SizeOf(Buf))^ , Buf , SizeOf(Buf));
//将整个文件内容往后移10字节
Move(pBuf^ , Pointer(DWORD(pBuf) + SizeOf(Buf))^ , dwSize - SizeOf(Buf));
//将临时Buf中的10字节写入文件头
Move(Buf , pBuf^ , SizeOf(Buf));
//释放资源
UnmapViewOfFile(pBuf);
end;
CloseHandle(hMap);
CloseHandle(hFile);
end;procedure TForm1.FormCreate(Sender: TObject);
begin
MoveLast10ToFirst('E:\dd.txt');
end;
function MoveLast10ToFirst(Const sFile : String) : Boolean;
var
hFile , hMap : THandle;
dwSize , dwHigh : DWORD;
pBuf : Pointer;
Buf : array [0..9] of Byte;
begin
Result := False;
hFile := CreateFile(PChar(sFile) , GENERIC_READ or GENERIC_WRITE,
FILE_SHARE_READ or FILE_SHARE_WRITE,
nil, OPEN_ALWAYS,
FILE_ATTRIBUTE_NORMAL , 0);
if hFile=INVALID_HANDLE_VALUE then exit;
dwSize := GetFileSize(hFile , @dwHigh);
if (dwSize < 10) or (dwHigh<>0) then begin //文件小于10或者大于4G,暂时放弃
CloseHandle(hFile);
exit;
end;
hMap := CreateFileMapping(hFile , NIL , PAGE_READWRITE , 0 , dwSize , NIL);
if hMap=0 then begin
CloseHandle(hFile);
exit;
end;
pBuf := MapViewOfFile(hMap , FILE_MAP_READ or FILE_MAP_WRITE , 0 , 0 , 0);
if pBuf<>NIL then begin
//将最后10字节保存到临时Buf中
Move(Pointer(DWORD(pBuf) + dwSize - SizeOf(Buf))^ , Buf , SizeOf(Buf));
//将整个文件内容往后移10字节
Move(pBuf^ , Pointer(DWORD(pBuf) + SizeOf(Buf))^ , dwSize - SizeOf(Buf));
//将临时Buf中的10字节写入文件头
Move(Buf , pBuf^ , SizeOf(Buf));
//释放资源
UnmapViewOfFile(pBuf);
end;
CloseHandle(hMap);
CloseHandle(hFile);
end;procedure TForm1.FormCreate(Sender: TObject);
begin
MoveLast10ToFirst('E:\dd.txt');
end;
解决方案 »
- Excel导入informix库中
- 请问:在StringGrid内显示100行数据,窗口可见是10行,座边的FixedCols显示行号......
- *******乡亲们!乡亲们!********
- DLL调用问题,在线等待。。。。
- 相恋五年的女友和我分手,我来散分!
- delphi下如何读取硬盘ATA接口信息?
- DELPHI怎么读取其它程序QWidget类里的数据?
- delphi记录删除
- 怎样利用程序点击mediaplayer1让其播放??
- 如何,把查询数据库结果保存成 WORD文档 ?
- delphi7使用XPManifest控件后,程序在64位系统中不能输入中文问题(乱码)
- 请教TObjectList的使用
Result := True; //加上这句...............
end;
第一次执行MoveLast10ToFirst('E:\dd.txt'); 程序无问题
不关闭程序,恢复E盘的dd.txt文件里的内容,再执行一次MoveLast10ToFirst('E:\dd.txt'); 程序运行结果就不对了
.....