[Func] DirInstall

Partagez des fonctions et des UDF AutoIt.
Règles du forum
.
Répondre
Avatar du membre
TommyDDR
Modérateur
Modérateur
Messages : 2086
Enregistré le : mar. 22 juil. 2008 21:55
Localisation : Nantes
Status : Hors ligne

[Func] DirInstall

#1

Message 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
3.1415926535897932384626433832795028841971693993751058209749445923078164062862089986280348253421170679
Avatar du membre
jguinch
Modérateur
Modérateur
Messages : 2511
Enregistré le : lun. 14 févr. 2011 22:12
Status : Hors ligne

Re: [Func] CreateFileInstall

#2

Message 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 !
Le script, ça fait gagner beaucoup de temps... à condition d'en avoir beaucoup devant soi !
Avatar du membre
TommyDDR
Modérateur
Modérateur
Messages : 2086
Enregistré le : mar. 22 juil. 2008 21:55
Localisation : Nantes
Status : Hors ligne

Re: [Func] CreateFileInstall

#3

Message par TommyDDR »

DirInstall c'est pas bête ça comme nom, j'adopte ^^
3.1415926535897932384626433832795028841971693993751058209749445923078164062862089986280348253421170679
Répondre