Page 1 sur 1

[Func] DirInstall

Posté : mar. 22 avr. 2014 09:54
par TommyDDR
Bonjour,

Comme vous le savez, nous ne pouvons pas faire de boucle de FileInstall avec une variable pour économiser du code, il faut écrire tous les FileInstall un par un, à la main.
C'est pourquoi j'ai créé un programme qui s'occupe de les créer pour vous, il suffit de lui indiquer les fichiers à inclure, les fichiers à exclure, les dossiers à excluse (voir aide sur le mask de _FileListToArrayRec)
Dans mon exemple, j'inclus tous les fichier, j'exclus les .au3, les .exe et deux png spécifiques, j'exclus les dossiers nommé "autre"
#include <File.au3>

Global $content = DirInstall("@ScriptDir", "@TempDir", "*|*.au3;*.exe;*backgroundLoading.png;*char_loading.png|autres", False)
ClipPut($content)
ConsoleWrite($content & @LF)

; ===================================================================================================================
; Func DirInstall($baseDir, $destDir, $mask = "*", $continueOnFind = True, $flag = 0)
;
;   Créer une fonction contenant tous les FileInstall des fichiers demandés
;
; $baseDir = Dossier à copier
; $destDir = Dossier de destination
; $mask = Masque utilisé pour la recherche de fichier (paramètre envoyé à _FileListToArrayRec)
; $continueOnFile = Indique si l'on doit quand même exécuter les FileInstall même si le dossier de destination existe
; $flag = Indique si l'on doit écraser la destination
;
; Return:
;   La fonction sous forme de string (à écrire dans un fichier, mettre dans le press papier, etc)
;
; Author: TommyDDR
; ===================================================================================================================
Func DirInstall($baseDir, $destDir, $mask = "*", $continueOnFind = True, $flag = 0)
    Local $bDirTemp
    Local $dDirTemp
    If(StringRight($baseDir, 1) <> "\") Then $bDirTemp = $baseDir & "\"
    If(StringRight($destDir, 1) <> "\") Then $dDirTemp = $destDir & "\"
    Local $forCopy = TransformVar($bDirTemp)
    Local $baseDir2 = StringReplace($bDirTemp, "@ScriptDir", ".")
    Local $destDir2 = TransformVar($dDirTemp)
    Local $bDirAff = '"' & $bDirTemp
    Local $dDirAff = '"' & $dDirTemp
    If($bDirTemp <> $baseDir2) Then
        $bDirAff = '"' & $baseDir2
    EndIf
    If($dDirTemp <> $destDir2) Then
        $dDirAff = $destDir & ' & "\'
    EndIf
    Local $folderToCopy = StringSplit($forCopy, "\", 3)
    $folderToCopy = $folderToCopy[UBound($folderToCopy, 1)-2] & "\"
    Local $return = "Func InstallFiles($flag = " & $flag & ")" & @CRLF
    Local $fileList = _FileListToArrayRec($baseDir2, $mask, 0, 1, 1, 1)
    If($flag = 0 And Not($continueOnFind)) Then
        $return &= @TAB & 'If(FileExists(' & $dDirAff & $folderToCopy & '")) Then Return' & @CRLF
    EndIf
    $return &= @TAB & 'DirCreate(' & $dDirAff & $folderToCopy & '")' & @CRLF
    For $i = 1 To $fileList[0]
        If(StringInStr(FileGetAttrib($baseDir2 & $fileList[$i]), "D")) Then
            $return &= @TAB & 'DirCreate(' & $dDirAff & $folderToCopy & $fileList[$i] & '")' & @CRLF
        EndIf
    Next
    For $i = 1 To $fileList[0]
        If(Not(StringInStr(FileGetAttrib($baseDir2 & $fileList[$i]), "D"))) Then
            $return &= @TAB & 'FileInstall(' & $bDirAff & $fileList[$i] & '", ' & $dDirAff & $folderToCopy & $fileList[$i] & '", $flag)' & @CRLF
        EndIf
    Next
    $return &= "EndFunc"
    Return $return
EndFunc

Func TransformVar($var)
    $var = StringReplace($var, "@AppDataCommonDir",     @AppDataCommonDir)
    $var = StringReplace($var, "@AppDataDir",           @AppDataDir)
    $var = StringReplace($var, "@CommonFilesDir",       @CommonFilesDir)
    $var = StringReplace($var, "@DesktopCommonDir",     @DesktopCommonDir)
    $var = StringReplace($var, "@DesktopDir",           @DesktopDir)
    $var = StringReplace($var, "@DocumentsCommonDir",   @DocumentsCommonDir)
    $var = StringReplace($var, "@FavoritesCommonDir",   @FavoritesCommonDir)
    $var = StringReplace($var, "@FavoritesDir",         @FavoritesDir)
    $var = StringReplace($var, "@HomePath",             @HomePath)
    $var = StringReplace($var, "@LocalAppDataDir",      @LocalAppDataDir)
    $var = StringReplace($var, "@MyDocumentsDir",       @MyDocumentsDir)
    $var = StringReplace($var, "@ProgramFilesDir",      @ProgramFilesDir)
    $var = StringReplace($var, "@ProgramsCommonDir",    @ProgramsCommonDir)
    $var = StringReplace($var, "@ProgramsDir",          @ProgramsDir)
    $var = StringReplace($var, "@ScriptDir",            @ScriptDir)
    $var = StringReplace($var, "@ScriptFullPath",       @ScriptFullPath)
    $var = StringReplace($var, "@ScriptName",           @ScriptName)
    $var = StringReplace($var, "@StartMenuCommonDir",   @StartMenuCommonDir)
    $var = StringReplace($var, "@StartMenuDir",         @StartMenuDir)
    $var = StringReplace($var, "@StartupCommonDir",     @StartupCommonDir)
    $var = StringReplace($var, "@StartupDir",           @StartupDir)
    $var = StringReplace($var, "@TempDir",              @TempDir)
    Return $var
EndFunc

Re: [Func] CreateFileInstall

Posté : mer. 23 avr. 2014 21:37
par jguinch
Merci Tommy pour ce super code !
Je me suis toujours dit que c'était un truc qui manquait, mais je n'ai jamais pris le temps de faire cette fonction.
Ayant été confronté au problème du "DirInstall" plus d'une fois, je ne peux que te remercier chaleureusement : ça me sera vraiment très utile !

Re: [Func] CreateFileInstall

Posté : mer. 23 avr. 2014 22:39
par TommyDDR
DirInstall c'est pas bête ça comme nom, j'adopte ^^