GetFileAttributes: Difference between revisions
From NSIS Wiki
Jump to navigationJump to search
Instructor (talk | contribs) No edit summary |
Instructor (talk | contribs) No edit summary |
||
Line 1: | Line 1: | ||
{{PageAuthor|Instructor}} | {{PageAuthor|Instructor}} | ||
{{User:Instructor/Headers/Template}} | |||
== Function Description == | |||
<highlight-nsis> | <highlight-nsis> | ||
Line 66: | Line 61: | ||
</highlight-nsis> | </highlight-nsis> | ||
== | == Function Code == | ||
<highlight-nsis> | <highlight-nsis> |
Revision as of 12:09, 30 November 2005
Author: Instructor (talk, contrib) |
Page for NSIS 2.07 and below users
You can use the latest version of headers (recommended) or the following function code (put the function code in your script before calling it)
Function Description
____________________________________________________________________________ GetFileAttributes v1.1 ____________________________________________________________________________ Get attributes of file or directory. Syntax: ${GetFileAttributes} "[File]" "[Attributes]" $var "[File]" ; File or directory ; "[Attributes]" ; "ALL" (default) ; -all attributes of file combined with "|" to output ; ; "READONLY|HIDDEN|SYSTEM|DIRECTORY|ARCHIVE| ; DEVICE|NORMAL|TEMPORARY|SPARSE_FILE|REPARSE_POINT| ; COMPRESSED|OFFLINE|NOT_CONTENT_INDEXED|ENCRYPTED" ; -file must have specified attributes ; $var ; Result: ; $var=attr1|attr2|... (if used "ALL") ; $var=1 file has specified attributes ; $var=0 file has no specified attributes Note: -Error flag if file isn't exist
Example1:
Section ${GetFileAttributes} "C:\MSDOS.SYS" "ALL" $R0 ; $R0=READONLY|HIDDEN|SYSTEM|ARCHIVE SectionEnd
Example2:
Section ${GetFileAttributes} "C:\MSDOS.SYS" "SYSTEM|HIDDEN" $R0 ; $R0=1 SectionEnd
Example3:
Section ${GetFileAttributes} "C:\MSDOS.SYS" "NORMAL" $R0 ; $R0=0 SectionEnd
Function Code
Function GetFileAttributes !define GetFileAttributes `!insertmacro GetFileAttributesCall` !macro GetFileAttributesCall _PATH _ATTR _RESULT Push `${_PATH}` Push `${_ATTR}` Call GetFileAttributes Pop ${_RESULT} !macroend Exch $1 Exch Exch $0 Exch Push $2 Push $3 Push $4 Push $5 System::Call 'kernel32::GetFileAttributes(t r0)i .r2' StrCmp $2 -1 error StrCpy $3 '' IntOp $0 $2 - 16384 IntCmp $0 0 0 +4 StrCpy $3 'ENCRYPTED|' StrCpy $2 $0 StrCmp $2 0 all IntOp $0 $2 - 8192 IntCmp $0 0 0 +4 StrCpy $3 'NOT_CONTENT_INDEXED|$3' StrCpy $2 $0 StrCmp $2 0 all IntOp $0 $2 - 4096 IntCmp $0 0 0 +4 StrCpy $3 'OFFLINE|$3' StrCpy $2 $0 StrCmp $2 0 all IntOp $0 $2 - 2048 IntCmp $0 0 0 +4 StrCpy $3 'COMPRESSED|$3' StrCpy $2 $0 StrCmp $2 0 all IntOp $0 $2 - 1024 IntCmp $0 0 0 +4 StrCpy $3 'REPARSE_POINT|$3' StrCpy $2 $0 StrCmp $2 0 all IntOp $0 $2 - 512 IntCmp $0 0 0 +4 StrCpy $3 'SPARSE_FILE|$3' StrCpy $2 $0 StrCmp $2 0 all IntOp $0 $2 - 256 IntCmp $0 0 0 +4 StrCpy $3 'TEMPORARY|$3' StrCpy $2 $0 StrCmp $2 0 all IntOp $0 $2 - 128 IntCmp $0 0 0 +4 StrCpy $3 'NORMAL|$3' StrCpy $2 $0 StrCmp $2 0 all IntOp $0 $2 - 64 IntCmp $0 0 0 +4 StrCpy $3 'DEVICE|$3' StrCpy $2 $0 StrCmp $2 0 all IntOp $0 $2 - 32 IntCmp $0 0 0 +4 StrCpy $3 'ARCHIVE|$3' StrCpy $2 $0 StrCmp $2 0 all IntOp $0 $2 - 16 IntCmp $0 0 0 +4 StrCpy $3 'DIRECTORY|$3' StrCpy $2 $0 StrCmp $2 0 all IntOp $0 $2 - 4 IntCmp $0 0 0 +4 StrCpy $3 'SYSTEM|$3' StrCpy $2 $0 StrCmp $2 0 all IntOp $0 $2 - 2 IntCmp $0 0 0 +4 StrCpy $3 'HIDDEN|$3' StrCpy $2 $0 StrCmp $2 0 all IntOp $0 $2 - 1 StrCpy $3 'READONLY|$3' all: StrCpy $0 $3 -1 StrCmp $1 '' end StrCmp $1 'ALL' end attrcmp: StrCpy $5 0 IntOp $5 $5 + 1 StrCpy $4 $1 1 $5 StrCmp $4 '' +2 StrCmp $4 '|' 0 -3 StrCpy $2 $1 $5 IntOp $5 $5 + 1 StrCpy $1 $1 '' $5 StrLen $3 $2 StrCpy $5 -1 IntOp $5 $5 + 1 StrCpy $4 $0 $3 $5 StrCmp $4 '' notfound StrCmp $4 $2 0 -3 StrCmp $1 '' 0 attrcmp StrCpy $0 1 goto end notfound: StrCpy $0 0 goto end error: SetErrors StrCpy $0 '' end: Pop $5 Pop $4 Pop $3 Pop $2 Pop $1 Exch $0 FunctionEnd