GetFileAttributes: Difference between revisions
From NSIS Wiki
Jump to navigationJump to search
m (Created by user: Instructor (talk, contrib).) |
m (Forgot about the category.) |
||
Line 200: | Line 200: | ||
FunctionEnd | FunctionEnd | ||
</highlight-nsis> | </highlight-nsis> | ||
[[{{ns:14}}:Disk, Path & File Functions]] |
Revision as of 11:44, 10 May 2005
Author: Instructor (talk, contrib) |
The Function
/* ____________________________________________________________________________ GetFileAttributes v1.0 ____________________________________________________________________________ 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 ; $var=-1 error (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 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: StrCpy $0 -1 end: Pop $5 Pop $4 Pop $3 Pop $2 Pop $1 Exch $0 FunctionEnd