I'm looking to find a list of folders and insert each folder into an array. Has anyone done something similar?
Ultimately, I want to populate a dropbox with the array contents and use the selection to kick off an installer in that folder.
So, if I have folders 1.0.0.1, 1.0.0.2, 1.0.0.3, and 1.0.0.5, I would need array index 0 to hold 1.0.0.1, array index 1 to hold 1.0.0.2, etc.
Thank you!
Folder list into an array
13 posts
Are you aware that NSIS has no native support for arrays ? (except http://nsis.sourceforge.net/Arrays_in_NSIS )
What system do you want to use to display & populate the dropbox ?
What system do you want to use to display & populate the dropbox ?
Originally posted by WizouYes, I'm aware of Afrow UK's work. It's great.
Are you aware that NSIS has no native support for arrays ? (except http://nsis.sourceforge.net/Arrays_in_NSIS )
What system do you want to use to display & populate the dropbox ?
I'm thinking of writing the array to the ListItems property of the combobox defined in an INI.
check the help file on FindFirst to enumerate the files or folder, you can fill your array like this
then you can use ${myArray->Concat} with separator char '|', as expected by ListItems
then you can use ${myArray->Concat} with separator char '|', as expected by ListItems
Originally posted by WizouDo you think that would be easier than writing the list of folders to a text file and doing reads on it?
check the help file on FindFirst to enumerate the files or folder, you can fill your array like this
then you can use ${myArray->Concat} with separator char '|', as expected by ListItems
Okay, I've put together this little function to get a list of the directories into an array. Unfortunately, my array contains the typical . and .. present when you do a dir command in DOS.
Any ideas how to exclude . and ..?
Any ideas how to exclude . and ..?
Function CreateDirList
${dirList->Init}
Var /global ArrayIndex
StrCpy $ArrayIndex 0
FindFirst $0 $1 $DRIVE_LETTER:\*.*
loop:
StrCmp $1 "" done
${dirList->Write} $ArrayIndex "$1"
FindNext $0 $1
IntOp $ArrayIndex $ArrayIndex + 1
Goto loop
done:
${dirList->Debug}
FindClose $0
StrCmp $1 "." skip
StrCmp $1 ".." skip
${dirList->Write} $ArrayIndex "$1"
skip:
FindNext $0 $1
Originally posted by WizouHadn't thought of it that way. Thanks, Wizou.
StrCmp $1 "." skip
StrCmp $1 ".." skip
${dirList->Write} $ArrayIndex "$1"
skip:
FindNext $0 $1
Here's my code, if anyone else finds it useful.
Function CreateDirList
${dirList->Init}
Var /global ArrayIndex
StrCpy $ArrayIndex 0
FindFirst $0 $1 $DRIVE_LETTER:\*.*
loop:
StrCmp $1 "" done
StrCmp $1 "." skip
StrCmp $1 ".." skip
IfFileExists "$DRIVE_LETTER:\$1\*.*" IsDir skip
IsDir:
${dirList->Write} $ArrayIndex "$1"
IntOp $ArrayIndex $ArrayIndex + 1
skip:
FindNext $0 $1
Goto loop
done:
${dirList->Reverse} ; -- Reverse the list so that the order is descending
${dirList->Concat} $PickVerList "|"
FindClose $0
FunctionEnd
you can also use GetFileAttributes to check that a file is really a folder
Originally posted by WizouI tried, but my $R0 variable is always blank.
you can also use GetFileAttributes to check that a file is really a folder
${GetFileAttributes} "$1" "ALL" $R0
MessageBox MB_OK "Directory: $1 :: Attribute: $R0"That message box shows the folder name, but the attribute is always empty, except for '.' and '..'. Those show DIRECTORY attribute.Mmmmh... try to use a fully qualified path like
${GetFileAttributes} "$DRIVE_LETTER:\$1" "DIRECTORY" $R0some NSIS functions (and Windows API) requires fully qualified path rather than relative path or file nameI don't know GetFileAttributes, but I would expect the first parameter to be the output, not the input. That's how all NSIS functions are done, so that's how all macros should be coded as well.
${GetFileAttributes} is documented in the NSIS Users Manual:
The output is the last parameter, e.g.
The output is the last parameter, e.g.
${GetFileAttributes} "C:\MSDOS.SYS" "ALL" $R0
; $R0=READONLY|HIDDEN|SYSTEM|ARCHIVE