生成Inno设置文件标志以编程方式

问题描述 投票:0回答:1

getflags将检查当前文件的扩展,并返回我不想压缩的文件类型的“ nocorpression”。 有可能吗? 我似乎找不到文档或在线表明它的任何东西。 如果没有,还有其他直接的方法可以实现这一目标吗?

我能想到的唯一其他方式是为每种类型创建一个附加的文件行,例如
Source: "{#MySrc}\*"; DestDir: "{#MyDst}"; Excludes: "*.jpg,*.dds"; Flags: "ignoreversion recursesubdirs";
Source: "{#MySrc}\*.jpg"; DestDir: "{#MyDst}"; Flags: "ignoreversion recursesubdirs nocompression";
Source: "{#MySrc}\*.dds"; DestDir: "{#MyDst}"; Flags: "ignoreversion recursesubdirs nocompression";

尽管这是可行的,但每次我遇到一个我决定不压缩的文件类型时,我都需要在多个地方进行此更改。 因此,如果可能的话,我宁愿将逻辑放在一个地方。

您的解决方案还不错。 如果您给我们的细节,我们可能会帮助您找到不需要“每次在几个地方更改”的解决方案。

,可以使用
Preprocessor

来生成

[Files]
inno-setup
1个回答
1
投票
Flags

。但是代码也很复杂。而且由于预处理程序的限制,它无法与非常大的目录结构一起使用(我设法使其可与多达3500个文件一起使用)。 #pragma parseroption -p- #define FileFlags(FileName) \ Local[0] = Lowercase(ExtractFileExt(FileName)), \ (Local[0] == "jpg" || Local[0] == "dds" ? "nocompression" : "") #define FileEntry(Source, DestDir) \ "Source: \"" + Source + "\"; DestDir: \"" + DestDir + "\"; " + \ "Flags: " + FileFlags(Source) + "\n" #define ProcessFile(Source, DestDir, FindResult, FindHandle) \ FindResult \ ? \ Local[0] = FindGetFileName(FindHandle), \ Local[1] = Source + "\\" + Local[0], \ (Local[0] != "." && Local[0] != ".." \ ? (DirExists(Local[1]) \ ? ProcessFolder(Local[1], DestDir + "\\" + Local[0]) \ : FileEntry(Local[1], DestDir)) \ : "") + \ ProcessFile(Source, DestDir, FindNext(FindHandle), FindHandle) \ : \ "" #define ProcessFolder(Source, DestDir) \ Local[0] = FindFirst(Source + "\\*", faAnyFile), \ ProcessFile(Source, DestDir, Local[0], Local[0]) #pragma parseroption -p+

根据需要调整
FileFlags

宏。并使用

ProcessFolder
宏,例如: [Files] #emit ProcessFolder(MySrc, MyDst)
它将生成一个代码:

Source: "C:\source\file.txt"; DestDir: "{app}"; Flags: 
Source: "C:\source\subfolder\file.jpg"; DestDir: "{app}\subfolder"; Flags: nocompression
Source: "C:\source\subfolder\another.txt"; DestDir: "{app}\subfolder"; Flags: 

(带有

MySrc
=
C:\source
=

MyDst
=
{app}

请参阅Inno设置预处理器的输出(翻译)?

由@zlatkokarakaš

iNno设置预处理器启用,以获取源路径的文件和大小。
    

最新问题
© www.soinside.com 2019 - 2024. All rights reserved.