【问题标题】:NSIS write to a file on APPDATA inside a subdirNSIS 写入子目录内 APPDATA 上的文件
【发布时间】:2014-10-19 04:27:32
【问题描述】:

我正在尝试将 1 行文本附加到 $APPDATA 文件夹上的文件中,该文件夹位于随机生成的文件夹内,所以我不知道它的完整路径如下:

C:\Users\MyUser\AppData\Roaming\MyApp\RANDOM_CRAP\config.json

RANDOM_CRAP 看起来像是文件夹的一些随机字符串,例如G4F6Hh3L

我在这里有什么选择?我需要使用 Search For a FileSearch 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

非常感谢。

【问题讨论】:

    标签: nsis


    【解决方案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
    

    【讨论】:

      猜你喜欢
      • 2011-07-06
      • 1970-01-01
      • 2011-10-25
      • 2013-01-19
      • 1970-01-01
      • 2012-06-19
      • 1970-01-01
      • 2018-01-08
      • 1970-01-01
      相关资源
      最近更新 更多