GetFileAttributes: Difference between revisions
From NSIS Wiki
Jump to navigationJump to search
m (Adding new author and category links.) |
Instructor (talk | contribs) No edit summary |
||
Line 1: | Line 1: | ||
{{PageAuthor|Instructor}} | {{PageAuthor|Instructor}} | ||
== The Function == | == Links == | ||
<highlight-nsis> | |||
; Latest version of headers "nsh.zip": | |||
: http://forums.winamp.com/showthread.php?s=&threadid=203228&goto=lastpost | |||
If a function is used without header, put the function code in your script before calling it. | |||
== The Function Description== | |||
<highlight-nsis> | |||
____________________________________________________________________________ | ____________________________________________________________________________ | ||
GetFileAttributes v1. | GetFileAttributes v1.1 | ||
____________________________________________________________________________ | ____________________________________________________________________________ | ||
Line 13: | Line 21: | ||
Syntax: | Syntax: | ||
${GetFileAttributes} "[ | ${GetFileAttributes} "[File]" "[Attributes]" $var | ||
"[ | "[File]" ; File or directory | ||
; | ; | ||
"[ | "[Attributes]" ; "ALL" (default) | ||
; -all attributes of file combined with "|" to output | ; -all attributes of file combined with "|" to output | ||
; | ; | ||
Line 29: | Line 37: | ||
; $var=1 file has specified attributes | ; $var=1 file has specified attributes | ||
; $var=0 file has no specified attributes | ; $var=0 file has no specified attributes | ||
Example1: | Note: | ||
Section | -Error flag if file isn't exist | ||
</highlight-nsis> | |||
<b>Example1:</b> | |||
<highlight-nsis>Section | |||
${GetFileAttributes} "C:\MSDOS.SYS" "ALL" $R0 | ${GetFileAttributes} "C:\MSDOS.SYS" "ALL" $R0 | ||
; $R0=READONLY|HIDDEN|SYSTEM|ARCHIVE | ; $R0=READONLY|HIDDEN|SYSTEM|ARCHIVE | ||
SectionEnd | SectionEnd | ||
</highlight-nsis> | |||
Example2: | <b>Example2:</b> | ||
Section | <highlight-nsis>Section | ||
${GetFileAttributes} "C:\MSDOS.SYS" "SYSTEM|HIDDEN" $R0 | ${GetFileAttributes} "C:\MSDOS.SYS" "SYSTEM|HIDDEN" $R0 | ||
; $R0=1 | ; $R0=1 | ||
SectionEnd | SectionEnd | ||
</highlight-nsis> | |||
Example3: | <b>Example3:</b> | ||
Section | <highlight-nsis>Section | ||
${GetFileAttributes} "C:\MSDOS.SYS" "NORMAL" $R0 | ${GetFileAttributes} "C:\MSDOS.SYS" "NORMAL" $R0 | ||
; $R0=0 | ; $R0=0 | ||
SectionEnd | SectionEnd | ||
</highlight-nsis> | |||
== The Function Code== | |||
<highlight-nsis> | |||
Function GetFileAttributes | Function GetFileAttributes | ||
!define GetFileAttributes `!insertmacro GetFileAttributesCall` | !define GetFileAttributes `!insertmacro GetFileAttributesCall` | ||
Line 108: | Line 124: | ||
IntOp $0 $2 - 512 | IntOp $0 $2 - 512 | ||
IntCmp $0 0 0 +4 | IntCmp $0 0 0 +4 | ||
StrCpy $3 'SPARSE_FILE|$3' | StrCpy $3 'SPARSE_FILE|$3' | ||
Line 188: | Line 203: | ||
error: | error: | ||
StrCpy $0 | SetErrors | ||
StrCpy $0 '' | |||
end: | end: |
Revision as of 14:40, 4 July 2005
Author: Instructor (talk, contrib) |
Links
- Latest version of headers "nsh.zip"
- http://forums.winamp.com/showthread.php?s=&threadid=203228&goto=lastpost
If a function is used without header, put the function code in your script before calling it.
The 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
The 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