gpt4 book ai didi

inno-setup - Inno Setup - FileCopy 在路径名中使用通配符

转载 作者:行者123 更新时间:2023-12-03 18:19:04 25 4
gpt4 key购买 nike

我正在尝试将所有数据库文件从以前的安装复制到具有新路径名的新安装。问题是安装程序不知道数据库文件的名称,所以我尝试使用通配符。

我尝试使用 TFileStream.Create(),但这是在搜索单个文件,例如“*.mdb”,而且我一直收到错误消息,提示找不到该文件。我也尝试过使用 FileCopy(),但它似乎只是失败并继续前进。我什至尝试使用 Exec()通过命令行运行它,但它只会卡住安装。

我在网上搜索了很长时间的答案并通读了大量文档。我只需要知道如何使用通配符来复制名称未知的文件。以下是我尝试过的示例。

TFileStream.Create()

    OldDBs := 'C:\Users\seang\Desktop\Old\*.mdb';
NewDBs := 'C:\Users\seang\Desktop\New\*.mdb';
SourceDB:= TFileStream.Create(OldDBs, fmOpenRead);
DestDB:= TFileStream.Create(NewDBs, fmCreate);
DestDB.CopyFrom(SourceDB, SourceDB.Size);
SourceDB.Free;
DestDB.Free;

文件复制()

    FileCopy('C:\Users\seang\Desktop\Old\*.mdb', 'C:\Users\seang\Desktop\New\*.mdb', True);

命令行

    Exec('cmd.exe', 'COPY "C:\Users\seang\Desktop\Old\*.mdb" "C:\Users\seang\Desktop\New\*.mdb"', '', SW_HIDE, ewWaitUntilTerminated, ErrorCode);

最佳答案

您需要使用 FindFirstFindNextFindClose 循环访问文件夹。您获取每个数据库名称,然后单独复制它。可以找到在 Pascal (Delphi) 中执行此操作的示例 here .在 InnoSetup 帮助文件中的 Support Functions Reference 部分的 File System Functions 中还有一个使用它们的示例:

// This example counts all of the files (not folders) in the System directory.
var
FilesFound: Integer;
FindRec: TFindRec;
begin
FilesFound := 0;
if FindFirst(ExpandConstant('{sys}\*'), FindRec) then begin
try
repeat
// Don't count directories
if FindRec.Attributes and FILE_ATTRIBUTE_DIRECTORY = 0 then
FilesFound := FilesFound + 1;
until not FindNext(FindRec);
finally
FindClose(FindRec);
end;
end;
MsgBox(IntToStr(FilesFound) + ' files found in the System directory.',
mbInformation, MB_OK);
end;

您可以更改上面的循环以查找每个 *.mdb 的正确旧文件夹(在 FindFirst 调用中)并更改计为一个 block 的行将找到的每个文件复制到新文件夹中(使用 FileCopyTFileStream,无论您喜欢哪个)。

关于inno-setup - Inno Setup - FileCopy 在路径名中使用通配符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13688882/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com