我试图将1行文本附加到$ APPDATA文件夹中的文件中,该文件夹位于随机生成的文件夹中,因此我不知道它是什么完整路径如:
C:\Users\MyUser\AppData\Roaming\MyApp\RANDOM_CRAP\config.json
虽然RANDOM_CRAP
看起来像某个文件夹的随机字符串,例如G4F6Hh3L
。
我有什么选择?我需要使用Search For a File还是Search for a File or Directory (Alternative)? 我们认为 MyApp
文件夹的唯一子文件夹是 RANDOM_CRAP
文件夹,其中包含我要编辑的文件。
如果在没有搜索的情况下没有其他方法可以访问此文件,我已尝试过这样做,但无法使其正常工作。 (我对NSIS来说很新)
这是我尝试过的(使用替代方法):
Push "config.json"
Push "$APPDATA"
Push $0
GetFunctionAddress $0 "myCallback"
Exch $0
Push "1" ; include subfolders because my desired file is in the random folder
Push "0" ; no need the . option
Call SearchFile
我已经复制了SearchFile code from this post并进行了回调:
Function myCallback
Exch 3
Pop $R4
MessageBox MB_OK "Callback executing!"
MessageBox MB_OK "File is at : $R4"
FunctionEnd
我知道SearchFile
正在运行(我已将MessageBox放入其中)但myCallback
似乎没有被调用。
非常感谢。
答案 0 :(得分:1)
如果您要查找已知文件且路径中只有一个目录未知,那么您可以进行基本的FindFirst
搜索:
Section
; Create "random" folders:
CreateDirectory "$temp\MyApp\foo"
System::Call kernel32::GetTickCount()i.r1 ; random enough
CreateDirectory "$temp\MyApp\bar$1"
FileOpen $0 "$temp\MyApp\bar$1\config.json" a
FileWrite $0 '{bogus:"data"}$\n'
FileClose $0
CreateDirectory "$temp\MyApp\baz"
!include LogicLib.nsh
; Do the actual search:
StrCpy $9 "$temp\MyApp" ; The folder we are going to search in
FindFirst $0 $1 "$temp\MyApp\*"
loop:
StrCmp $1 "" done
${If} ${FileExists} "$9\$1\config.json"
DetailPrint "Found: $9\$1\config.json"
${EndIf}
FindNext $0 $1
Goto loop
done:
FindClose $0
SectionEnd