0
我试图用RenameFile
函数重命名目录没有成功。使用DirExists
函数,我确认了原始目录存在,并且新目录不存在。但重命名仍然失败。目录路径只包含ASCII字符。我正在使用Inno Setup 5.5.5。尝试了Unicode和非Unicode版本。相同的结果。该代码是:Inno安装程序:重命名目录失败
procedure CurStepChanged(CurStep: TSetupStep);
var
NewFolder, BackupFolder: String;
begin
NewFolder := LgtUserDirPage.Values[0];
Log('NewFolder: ' + NewFolder);
if (CurStep = ssInstall) and DirExists(NewFolder) and (pos('backup', WizardSelectedComponents(False)) > 0) then begin
BackupFolder := NewFolder + '-backup'
Log('BackupFolder: ' + BackupFolder);
if DirExists(NewFolder) then Log('Found!');
if not DirExists(BackupFolder) then Log('No backup!');
if RenameFile(NewFolder, BackupFolder) then Log('Backup created!');
end
else if (CurStep = ssPostInstall) then begin
if FileExists(BackupFolder + '\settings.lgt') then
FileCopy(BackupFolder + '\settings.lgt', NewFolder + '\settings.lgt', False);
if FileExists(BackupFolder + '\settings.logtalk') then
FileCopy(BackupFolder + '\settings.logtalk', NewFolder + '\settings.logtalk', False)
end
end;
调试输出是:
Setup application started
Setup version: Inno Setup version 5.5.5 (u)
Original Setup EXE: C:\Users\pmoura\Desktop\Output\logtalk-3.00.0-rc7.exe
Setup command line: /SL5="$3E0350,1739097,119296,C:\Users\pmoura\Desktop\Output\logtalk-3.00.0-rc7.exe" /SPAWNWND=$2D038A /NOTIFYWND=$220252 /DEBUGWND=$11027C
Windows version: 6.1.7601 SP1 (NT platform: Yes)
64-bit Windows: Yes
Processor architecture: x64
User privileges: Administrative
64-bit install mode: No
Created temporary directory: C:\Users\pmoura\AppData\Local\Temp\is-JA0BI.tmp
NewFolder: C:\Users\pmoura\Documents\Logtalk
BackupFolder: C:\Users\pmoura\Documents\Logtalk-backup
Found!
No backup!
我从来没有得到过Backup created!
输出。执行只是从该行开始到程序结束。任何人都知道任何可能解释重命名失败的原因?磁盘空间不是一个问题,顺便说一句。
'RenameFile'(因为它的名称表示)重命名**文件**,而不是文件夹。您可以创建新文件夹,将文件从旧文件夹复制到新文件夹,然后使用'RemoveDir'或'DelTree'删除原始文件夹。 – 2014-11-21 23:22:27
@KenWhite'RenameFile'函数的文档在这方面是明确的:“尝试将OldFile指定的文件或目录的名称更改为NewFile。(...)”。因此,这不应该是问题。但是,谢谢你的建议。 – 2014-11-21 23:37:48
InnoSetup的Pascal脚本基于Delphi运行时库(RTL),如果您检查源代码,您将看到RTL的[RenameFile](http://docwiki.embarcadero.com/Libraries/XE6/en/System。 SysUtils.RenameFile)被调用。该功能的文档声明它重命名文件,并且根本没有提及重命名目录。 – 2014-11-22 00:11:45