用户登录  |  用户注册
首 页商业源码原创产品编程论坛
当前位置:PB创新网文章中心编程技巧Delphi

删除或重命名正在打开的文件

减小字体 增大字体 作者:佚名  来源:本站整理  发布时间:2009-03-16 20:03:44

 摘 要:对一些windows使用的文件,如DLL或VxD,有些时候需要
 关键字:重启 删除 复制 重命名 文件
 类 别:API

Windows NT中有一个函数MoveFileEx,若使用MOVEFILE_DELAY_UNTIL_REBOOT 标记,它可以在重启过程中删除文件。但是,Windows 9x 并不支持这个标记。怎么办呢?

每次当你重启,windows会在Windows目录下寻找文件WININIT.INI。这个文件包含删除/复制/重命名文件的命令,它可以在任何东西(实际上是决大部分)被载入前运行。你可以在[Rename]部分里使用语法 目标文件=原文件。如果目标文件为NUL,则文件将被删除。文件名和路径必须是短文件名(因为这个过程运行于长文件名支持程序载入之前)。

注意文件win32.hlp与这个例子相反,你不可以使用WritePrivateProfileString()或TiniFile访问这个文件,可能由于它有副本值。若它有空值,TiniFile会覆盖它而不是新建一个,所以你最好使用TstringList代替。

以下是一些输入项:

[rename]
NUL=C:\TEMP.TXT
NUL=C:\TEMP2.TXT
C:\NEW_DIR\EXISTING.TXT=C:\EXISTING.TXT
C:\NEW_DIR\NEWNAME.TXT=C:\OLDNAME.TXT
C:\EXISTING.TXT=C:\TEMP\NEWFILE.TXT

以下是函数DeleteLater,它会往wininit.ini里添加NUL=文件名,若wininit.ini不存在,则创建一个,也可以创建[rename]部分。

procedure DeleteLater(Filename: string);
var
Wininit : string;
Buffer : array[0..MAX_PATH] Of char;
I,J : integer;
Ini : TStringList;
begin
FillChar(Buffer, SizeOf(Buffer), 0);
GetWindowsDirectory(Buffer, SizeOf(Buffer));
Wininit := IncludeTrailingBackslash(Buffer) + ''Wininit.ini'';

Ini := TStringList.Create;
try
if FileExists(Wininit) then Ini.LoadFromFile(Wininit);
for I := 0 to Ini.Count - 1 do Ini[I] := Uppercase(Ini[I]);

J := Ini.IndexOf(''[RENAME]'');
if J = -1 then
begin
Ini.Add(''[Rename]'');
J := 0;
end;
FillChar(Buffer, SizeOf(Buffer), 0);
GetShortPathName(PChar(Filename), Buffer, SizeOf(Buffer));
Ini.Insert(J+1, ''NUL='' + Buffer);
Ini.SaveToFile(Wininit);
finally
Ini.Free;
end;
end;

Tags:

作者:佚名

文章评论评论内容只代表网友观点,与本站立场无关!

   评论摘要(共 0 条,得分 0 分,平均 0 分) 查看完整评论
PB创新网ourmis.com】Copyright © 2000-2009 . All Rights Reserved .
页面执行时间:19,640.63000 毫秒
Email:ourmis@126.com QQ:2322888 蜀ICP备05006790号