FileJoin: Difference between revisions

From NSIS Wiki
Jump to navigationJump to search
m (Adding new author and category links.)
No edit summary
 
(One intermediate revision by the same user not shown)
Line 1: Line 1:
{{PageAuthor|Instructor}}
{{PageAuthor|Instructor}}


== Links ==
{{User:Instructor/Headers/Template}}
; Latest version of headers "nsh.zip":
: http://forums.winamp.com/showthread.php?s=&threadid=203228&goto=lastpost


If a function is used without an header, you should put the function below in your script before calling it.
== Function Description ==
 
<highlight-nsis>
== The Function ==
____________________________________________________________________________
<highlight-nsis>/* ____________________________________________________________________________


                             FileJoin v1.4
                             FileJoin v1.4
Line 30: Line 27:
-Error flag if input files aren't exists
-Error flag if input files aren't exists
-Error flag if output file path isn't exists
-Error flag if output file path isn't exists
</highlight-nsis>






Example1 (Join:  a.log + b.log = Z.log):
<b>Example1 (Join:  a.log + b.log = Z.log):</b>
Section
<highlight-nsis>Section
${FileJoin} "C:\a.log" "C:\logs\b.log" "C:\Z.log"
${FileJoin} "C:\a.log" "C:\logs\b.log" "C:\Z.log"
SectionEnd
SectionEnd
</highlight-nsis>




Example2 (Add:  a.log + b.log = a.log):
<b>Example2 (Add:  a.log + b.log = a.log):</b>
Section
<highlight-nsis>Section
${FileJoin} "C:\a.log" "C:\logs\b.log" "C:\a.log"
${FileJoin} "C:\a.log" "C:\logs\b.log" "C:\a.log"
SectionEnd*/
SectionEnd
 
</highlight-nsis>


;---------------------------------------------------------------------------
== Function Code ==


<highlight-nsis>
Function FileJoin
Function FileJoin
!define FileJoin `!insertmacro FileJoinCall`
!define FileJoin `!insertmacro FileJoinCall`

Latest revision as of 12:00, 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

____________________________________________________________________________
 
                            FileJoin v1.4
____________________________________________________________________________
 
Thanks Afrow UK (Based on his idea of Function "JoinFiles")
 
 
Join two files in one (File1 + File2 = File3).
 
 
Syntax:
${FileJoin} "[File1]" "[File2]" "[File3]"
 
"[File1]"     ; Input File1
"[File2]"     ; Input File2
"[File3]"     ; Output File3
              ;  If [File3]="" Then add [File2] to [File1]
 
Note:
-Error flag if input files aren't exists
-Error flag if output file path isn't exists


Example1 (Join: a.log + b.log = Z.log):

Section
	${FileJoin} "C:\a.log" "C:\logs\b.log" "C:\Z.log"
SectionEnd


Example2 (Add: a.log + b.log = a.log):

Section
	${FileJoin} "C:\a.log" "C:\logs\b.log" "C:\a.log"
SectionEnd

Function Code

Function FileJoin
	!define FileJoin `!insertmacro FileJoinCall`
 
	!macro FileJoinCall _FILE1 _FILE2 _FILE3
		Push `${_FILE1}`
		Push `${_FILE2}`
		Push `${_FILE3}`
		Call FileJoin
	!macroend
 
	Exch $2
	Exch
	Exch $1
	Exch
	Exch 2
	Exch $0
	Exch 2
	Push $3
	Push $4
	Push $5
	ClearErrors
 
	IfFileExists $0 0 error
	IfFileExists $1 0 error
	StrCpy $3 0
	IntOp $3 $3 - 1
	StrCpy $4 $2 1 $3
	StrCmp $4 \ +2
	StrCmp $4 '' +3 -3
	StrCpy $4 $2 $3
	IfFileExists '$4\*.*' 0 error
 
	StrCmp $2 $0 0 +2
	StrCpy $2 ''
	StrCmp $2 '' 0 +3
	StrCpy $4 $0
	goto +3
	GetTempFileName $4
	CopyFiles /SILENT $0 $4
	FileOpen $3 $4 a
	IfErrors error
	FileSeek $3 -1 END
	FileRead $3 $5
	StrCmp $5 '$\r' +3
	StrCmp $5 '$' +2
	FileWrite $3 '$\r$'
 
	;FileWrite $3 '$\r$--Divider--$\r$'
 
	FileOpen $0 $1 r
	IfErrors error
	FileRead $0 $5
	IfErrors +3
	FileWrite $3 $5
	goto -3
	FileClose $0
	FileClose $3
	StrCmp $2 '' end
	Delete '$EXEDIR\$2'
	Rename $4 '$EXEDIR\$2'
	IfErrors 0 end
	Delete $2
	Rename $4 $2
	IfErrors 0 end
 
	error:
	SetErrors
 
	end:
	Pop $5
	Pop $4
	Pop $3
	Pop $2
	Pop $1
	Pop $0
FunctionEnd