GetFileAttributes: Difference between revisions

From NSIS Wiki
Jump to navigationJump to search
m (Forgot about the category.)
m (Updated by user: Instructor (talk, contrib).)
Line 110: Line 110:


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'

Revision as of 11:46, 27 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