gpt4 book ai didi

recursion - 使用 Inno Setup PreProcessor 获取源路径及其子目录的文件和大小

转载 作者:行者123 更新时间:2023-12-03 06:55:13 25 4
gpt4 key购买 nike

我可以使用 Inno Setup PreProcessor 获取源路径及其子目录的文件和大小吗?,

我正在做一个批处理编译器,我需要在 [Setup] DiskSpanning True 或 False 中自动设置大小

只能获取源的大小,

有人可以帮助我吗?

<小时/>
#define FindHandle
#define FindResult
#define Mask "*.*"
#define size 0
#define allfiles ""


#sub ProcessFoundFile
#define FileName FindGetFileName(FindHandle)
#if direxists(Filename) && Filename!="." && Filename!=".."
#Define Public Mask AddBackSlash(Filename)+"*.*"
#else
#Define Mask "*.*"
#endif
#define public allfiles allfiles + " - " +Filename
#define public size size + FileSize(FileName)
#endsub


#for {FindHandle = FindResult = FindFirst(Mask, faDirectory); FindResult; FindResult = FindNext(FindHandle)} ProcessFoundFile
#if FindHandle
; FindClose(FindHandle)
#endif


#IF Size > 2100000000
#DEFINE Span "True"
#ELSE
#DEFINE Span "False"
#ENDIF

[Setup]
DiskSpanning={#Span}
InternalCompressLevel=ultra
DiskClusterSize=2048
CompressionThreads=2
Compression=lzma2/ultra64
SolidCompression=no

最佳答案

好吧,这有点旧了,但我想分享我的解决方案,因为我遇到了同样的问题并找到了某种解决方案:

#define FindHandle
#define FindResult
#dim InnerMask[65536]
#define InnerMask[0] ""
#define size 0

#sub ProcessFoundFile
#define InnerFileName FindGetFileName(FindHandle)
#define fileName InnerMask[InnerMaskWorkPosition] + InnerFileName
#if InnerFileName!="." && InnerFileName!=".."
#if direxists(FileName)
#define Public InnerMask[InnerMaskPosition] FileName+"\"
#define Public InnerMaskPosition InnerMaskPosition + 1
#else
#define Public size size + FileSize(FileName)
#endif
#endif
#endsub

#sub ProcessInnerMaskPosition
#for {FindHandle = FindResult = FindFirst(InnerMask[InnerMaskWorkPosition]+"*", faAnyFile); FindResult; FindResult = FindNext(FindHandle)} ProcessFoundFile
#if FindHandle
#expr FindClose(FindHandle)
#endif
#endsub

#sub RunSizeScan
#define Public InnerMaskPosition 1
#define Public InnerMaskWorkPosition 0
#expr size=0
#for {InnerMaskWorkPosition = 0; InnerMaskWorkPosition < InnerMaskPosition; InnerMaskWorkPosition++} ProcessInnerMaskPosition
#undef Public InnerMaskPosition
#undef Public InnerMaskWorkPosition
#endsub

#expr InnerMask[0]="some-dir-name-you-want-the-size-of\"
#expr RunSizeScan

#if size > 2100000000
#define Span "True"
#else
#define Span "False"
#endif

它的作用是扫描数组“InnerMask”中给定的目录,查找所有不是“.”的内容。或者 ”..”。文件将添加到已计算的大小,目录将添加到数组“InnerMask”。一旦没有更多的子目录可供评估,此过程将结束。

注意:由于阵列的限制设置为 65536,因此扫描目录中嵌套的文件夹数量不应超过此数量。否则,您可以尝试重用第一个已处理的数组槽或使用多个数组。

关于recursion - 使用 Inno Setup PreProcessor 获取源路径及其子目录的文件和大小,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20883200/

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