论坛风格切换切换到宽版
  • 6156阅读
  • 11回复

【求助】虎版,请问如何让安装前可以重命名已存在的文件或文件夹? [复制链接]

上一主题 下一主题
离线fielero
 

发帖
20
金钱
200
威望
20
只看楼主 正序阅读 0 发表于: 2015-05-27
做的更新包想要实现把旧文件备份而非覆盖的功能,求虎版赐教!
离线fielero

发帖
20
金钱
200
威望
20
只看该作者 11 发表于: 2015-06-01
回 9楼(gnatix) 的帖子
gnatix:2 楼的代码不就是非常具体的范例吗? (2015-05-30 16:32) 

那个改文件的懂了,是改文件夹名称的不懂……
离线fielero

发帖
20
金钱
200
威望
20
只看该作者 10 发表于: 2015-05-31
回 8楼(gnatix) 的帖子
谢谢虎版,那个备份文件已经成功了,可是我要重命名的是文件夹啊,比如把现有的文件夹重命名成XXX.BAK
离线gnatix

发帖
7696
金钱
-8279
威望
-828
只看该作者 9 发表于: 2015-05-30
回 7楼(fielero) 的帖子
fielero:可以举个代码范例吗? (2015-05-29 19:24) 

2 楼的代码不就是非常具体的范例吗?
离线gnatix

发帖
7696
金钱
-8279
威望
-828
只看该作者 8 发表于: 2015-05-30
回 6楼(fielero) 的帖子
fielero:谢谢虎版多年来的无私帮助!!那如果备份的不是文件而是文件夹,并且不是在{app}里而是文档里(比如{userdocs}\新建文件夹,重命名成新建文件夹BAK)呢?而{app}还继续安装程序本体。 (2015-05-29 19:19)

那只是一个示例而已,并不是说只是备份 {app} 中的文件。你只要在 [FILES] 段中的每行后面加上 BeforeInstall: BackupOldFile,那么每个现有的旧文件将会在原来的文件夹中备份一份,比如 xyz.abc 将被备份为 xyz.abc.BAK。
示例只是给你一个思路,根据你具体的情况可能需要进行调整。
你最好先具体试试。
离线fielero

发帖
20
金钱
200
威望
20
只看该作者 7 发表于: 2015-05-29
回 1楼(lovelost) 的帖子
lovelost:if FileOrDirExists(xxx) then RenameFile(xxx);  (2015-05-27 15:33) 

可以举个代码范例吗?
离线fielero

发帖
20
金钱
200
威望
20
只看该作者 6 发表于: 2015-05-29
回 2楼(gnatix) 的帖子
gnatix:[Files]Source: "*"; DestDir: "{app}"; Flags: recursesubdirs; BeforeInstall: BackupOldFileprocedure BackupOldFile();....... (2015-05-27 18:58)

谢谢虎版多年来的无私帮助!!
那如果备份的不是文件而是文件夹,并且不是在{app}里而是文档里(比如{userdocs}\新建文件夹,重命名成新建文件夹BAK)呢?而{app}还继续安装程序本体。
离线fielero

发帖
20
金钱
200
威望
20
只看该作者 5 发表于: 2015-05-29
回 1楼(lovelost) 的帖子
lovelost:if FileOrDirExists(xxx) then RenameFile(xxx);  (2015-05-27 15:33) 

不胜感激!!
离线gnatix

发帖
7696
金钱
-8279
威望
-828
只看该作者 4 发表于: 2015-05-29
下面的代码供参考。功能:
安装文件前,检查文件是否已经存在。如果存在,则将给文件备份到子目录 “备份文件夹” 中。
在子目录 “备份文件夹” 中自动创建一个批处理文件,运行该批处理文件将恢复所备份的文件到它们原来的位置。

你当然可以在卸载完成后,自动运行该批处理文件,然后删除子目录 “备份文件夹”。不过这个功能还是留给你自己来完成。


[Setup]

AppName=My ProgramAppVersion=1.5
DefaultDirName={pf}\_My ProgramDefaultGroupName=My Program
DirExistsWarning=no

[Files]Source: "e:\HHTest1\*"; DestDir: "{app}"; Flags: recursesubdirs; BeforeInstall: BackupOldFile
Source: "e:\HHTest2\*"; DestDir: "{app}"; Flags: recursesubdirs; BeforeInstall: BackupOldFile

[Code]procedure BackupOldFile();
var  BackupDir, CurFilePath, DesFileDir, DesFileName: string;
begin  CurFilePath:= ExpandConstant(CurrentFileName);
  if FileExists(CurFilePath) then    begin
      BackupDir:= ExpandConstant('{app}\备份文件夹')      if not FileExists(BackupDir + '\恢复.bat') then
        begin          CreateDir(BackupDir);
          SaveStringToFile(BackupDir + '\恢复.bat', '@ ECHO OFF' +  #13#10 + 'REM 恢复备份的文件', False);        end;
      DesFileDir:= ExtractFileDir(CurFilePath);      DesFileName:= ExtractFileName(CurFilePath);
      FileCopy(CurFilePath, BackupDir + '\' + DesFileName, True);      SaveStringToFile(BackupDir + '\恢复.bat', #13#10 + 'copy "' + BackupDir + '\' + DesFileName + '" "' + DesFileDir + '\' + DesFileName + '"', True);
    end;end;
离线lxd198717

发帖
156
金钱
-1060
威望
-55
只看该作者 3 发表于: 2015-05-27
用户被禁言,该主题自动屏蔽!
本帖提到的人: @gnatix @restools