Page 1 sur 1
[R] Alléger le contenu d'un dossier
Posté : lun. 16 déc. 2013 18:13
par brolee93
Bonjour les amis ,
Je travaille sur un script afin d'alléger mes applis android (je fais des roms pour Android )
Les applis contiennent des dossiers avec plusieurs tailles de png qui sont pour tous les mobiles (full hd , HD , ecran standard etc) mais moi comme je suis en XHDPI j'aimerai garder que les png xhdpi et supprimer tous les doublons qui sont placés dans les autres dossiers (même nom de png mais pas la même taille)
j'ai fait mon script mais il est lent, très lent même, surtout à partir de plus 100 fichiers du type .png et .jpg.
je vous montre un bout du code , j'utilise la fonction "search" bien que j'en suis sûr que "filelistarray" marcherait et aussi je suis sûr que ce serait plus rapide.
En gros c'est du style de Kdiff si vous connaissez sauf que je veux qu'il me supprime tous mes fichiers inutile.
Le But :
étape 1:Lister tous les répertoires contenant des png/jpg
étape 2:Choisir son répertoire par défaut car ce répertoire doit évidement rester intact par exemple:
drawable-xhdpi
étape 3:Ensuite le logiciel doit scanner TOUS les PNG et JPG dans ce dossier (étape2) puis les lister ou les placer en variables .
étape 4:le logiciel doit scanner tous les dossiers de l'étape 1 puis supprimer tous les png/jpg qui possèdent les même noms que dans le dossier par défaut (les tailles sont en principe différente donc se baser sur le nom est une bonne base )
étape 5: Good

on passe au second dossier par défaut mais ça je saurai le faire ^^
En gros j'ai besoin d'aide pour le raccourcir car j'ai entré 90 entrées de possibilité de dossier et je ne veux qu'il exectue dans tous les dossier commençant par:"drawable-xxxxxxxx" vu que le nom est aléatoire lol donc voila pourquoi j'ai mis 90 entrées de dossier lol
Voici mon bout de code .
► Afficher le texte
Code : Tout sélectionner
#include <File.au3>
#include <Array.au3>
$source = FileSelectFolder("Choose a folder.", "C:\_ApkTool_Team-ReDroiD\projects\")
$dirHDPI = ($source & "\res\drawable-hdpi\")
$dirMDPI = ($source & "\res\drawable-mdpi\")
$dirXDPI = ($source & "\res\drawable-xdpi\")
$dirxxhdpi = ($source & "\res\drawable-xxhdpi\")
$dirNODPI = ($source & "\res\drawable-nodpi\")
$dir_MIPMAP_HDPI = ($source & "\res\drawable-hdpi\")
$dir_MIPMAP_MDPI = ($source & "\res\drawable-mdpi\")
$dir_MIPMAP_XDPI = ($source & "\res\drawable-xdpi\")
$dir_MIPMAP_xxhdpi = ($source & "\res\drawable-xxhdpi\")
$dir_MIPMAP_NODPI = ($source & "\res\drawable-nodpi\")
$dir1 = ($source & "\res\drawable")
$dir3 = ($source & "\res\drawable-ldpi\")
$dir5 = ($source & "\res\drawable-tvdpi\")
$dir7 = ($source & "\res\drawable-large-hdpi-v11\")
$dir8 = ($source & "\res\drawable-large-ldpi-v11\")
$dir9 = ($source & "\res\drawable-large-mdpi-v11\")
$dir10 = ($source & "\res\drawable-large-tvdpi-v11\")
$dir11 = ($source & "\res\drawable-large-xxhdpi-v11\")
$dir12 = ($source & "\res\drawable-xlarge-hdpi-v11\")
$dir13 = ($source & "\res\drawable-xlarge-ldpi-v11\")
$dir14 = ($source & "\res\drawable-xlarge-mdpi-v11\")
$dir15 = ($source & "\res\drawable-xlarge-tvdpi-v11\")
$dir16 = ($source & "\res\drawable-xlarge-xxhdpi-v11\")
$dir17 = ($source & "\res\drawable-large-hdpi-v13\")
$dir18 = ($source & "\res\drawable-large-ldpi-v13\")
$dir19 = ($source & "\res\drawable-large-mdpi-v13\")
$dir20 = ($source & "\res\drawable-large-tvdpi-v13\")
$dir21 = ($source & "\res\drawable-large-mdpi-v13\")
$dir22 = ($source & "\res\drawable-large-xxhdpi-v13\")
; etc jusqu'a plus de $dir90 ...
Local $search = FileFindFirstFile($source & "\res\drawable-xhdpi\" & "*.png*")
If $search = -1 Then
EndIf
While 1
Local $file = FileFindNextFile($search)
If @error Then ExitLoop
FileRecycle($dir1 & $file)
FileRecycle($dirHDPI & $file)
FileRecycle($dir3 & $file)
FileRecycle($dirMDPI & $file)
FileRecycle($dir5 & $file)
FileRecycle($dirxxhdpi & $file)
FileRecycle($dirNODPI & $file)
FileRecycle($dir7 & $file)
FileRecycle($dir8 & $file)
FileRecycle($dir9 & $file)
FileRecycle($dir10 & $file)
FileRecycle($dir11 & $file)
;;;; j'ai retiré le reste du code car sinon ca va faire trop de lignes :/
WEnd
;On passe au second dossier à alléger
Local $search = FileFindFirstFile($source & "\res\drawable-hhdpi\" & "*.png*")
If $search = -1 Then
EndIf
While 1
Local $file = FileFindNextFile($search)
If @error Then ExitLoop
FileRecycle($dir1 & $file)
:FileRecycle($dirHDPI & $file)
FileRecycle($dir3 & $file)
FileRecycle($dirMDPI & $file)
FileRecycle($dir5 & $file)
FileRecycle($dirxxhdpi & $file)
FileRecycle($dirNODPI & $file)
FileRecycle($dir7 & $file)
FileRecycle($dir8 & $file)
FileRecycle($dir9 & $file)
FileRecycle($dir10 & $file)
FileRecycle($dir11 & $file)
;;;; j'ai retiré le reste du code car sinon ca va faire trop de lignes :/
WEnd
;Suppression des dossiers vide :
$size = DirGetSize($dirMIPMPAP_2)
If $size = 0 Then DirRemove($dirMIPMPAP_2)
$size = DirGetSize($dirMIPMPAP_3)
If $size = 0 Then DirRemove($dirMIPMPAP_3)
$size = DirGetSize($dirMIPMPAP_5)
If $size = 0 Then DirRemove($dirMIPMPAP_5)
$size = DirGetSize($dirMIPMPAP_5)
If $size = 0 Then DirRemove($dirMIPMPAP_5)
$size = DirGetSize($dirMIPMPAP_7)
If $size = 0 Then DirRemove($dirMIPMPAP_7)
$size = DirGetSize($dirMIPMPAP_8)
If $size = 0 Then DirRemove($dirMIPMPAP_8)
$size = DirGetSize($dirMIPMPAP_9)
If $size = 0 Then DirRemove($dirMIPMPAP_9)
$size = DirGetSize($dirMIPMPAP_10)
If $size = 0 Then DirRemove($dirMIPMPAP_10)
;;;; j'ai retiré le reste du code car sinon ca va faire trop de lignes :/
;360 XHDPI
Local $search = FileFindFirstFile($source & "\res\drawable-sw360dp-xhdpi\" & "*.png*")
If $search = -1 Then
EndIf
While 1
Local $file = FileFindNextFile($search)
If @error Then ExitLoop
FileRecycle($dir1 & $file)
FileRecycle($dirHDPI & $file)
FileRecycle($dir3 & $file)
FileRecycle($dirMDPI & $file)
FileRecycle($dir5 & $file)
FileRecycle($dirxxhdpi & $file)
FileRecycle($dirNODPI & $file)
FileRecycle($dir7 & $file)
FileRecycle($dir8 & $file)
FileRecycle($dir9 & $file)
;etc etc etc
WEnd
Re: [..] Alléger le contenu d'un dossier
Posté : mar. 17 déc. 2013 02:26
par bloodwolff
J'espère que cela vous conviendra. bien sur l'interface est à refaire selon vos besoins.
Le fichier choisis dans la combobox sera celui qui restera intact.
Il faudra peut-être ajouter une 3e wildcard car je sais que les .jpg peuvent également s'écrire .jpeg.
Sur ce bonne soirée et si vous avez le moindre problème je suis la
► Afficher le texte
Code : Tout sélectionner
#include <ButtonConstants.au3>
#include <ComboConstants.au3>
#include <GUIConstantsEx.au3>
#include <WindowsConstants.au3>
#include <File.au3>
#include <Array.au3>
$mainDir = FileSelectFolder("Choose a folder.", "C:\_ApkTool_Team-ReDroiD\projects\")
ConsoleWrite($mainDir)
$Form1 = GUICreate("Form1", 303, 48, 192, 124)
$Combo1 = GUICtrlCreateCombo("", 8, 8, 145, 25, BitOR($CBS_DROPDOWNLIST,$CBS_AUTOHSCROLL))
$Button1 = GUICtrlCreateButton("Nettoyer Doublon", 168, 8, 123, 25)
GUISetState(@SW_SHOW)
$listDir = _FileListToArray($mainDir, "*", 2)
$ComboDataText = ""
for $i = 1 to $listDir[0]
$ComboDataText &= "|" & $listDir[$i]
Next
GUICtrlSetData($Combo1, $ComboDataText, $listDir[1])
While 1
$nMsg = GUIGetMsg()
Switch $nMsg
Case $GUI_EVENT_CLOSE
Exit
Case $Button1
$dontTouchDir = GUICtrlRead($Combo1)
$dontTouchDirList = MultipleWildCardList($mainDir & "\" & $dontTouchDir, "*.png", "*.jpg")
for $i = 1 to $listDir[0]
if ($listDir[$i] <> $dontTouchDir) Then
$aDelFileList = MultipleWildCardList($mainDir & "\" & $listDir[$i], "*.png", "*.jpg")
for $aDelFile in $aDelFileList
If _ArraySearch($dontTouchDirList, $aDelFile) <> -1 Then _
FileDelete($mainDir & "\" & $listDir[$i] & "\" & $aDelFile)
Next
EndIf
Next
GUIDelete()
MsgBox(0, "", "Doublons nettoyés!")
exit
EndSwitch
WEnd
Func MultipleWildCardList($Path, $1, $2)
$1List = _FileListToArray($Path, $1, 1)
if @error Then dim $1List[1] = [0]
$2List = _FileListToArray($Path, $2, 1)
if @error Then dim $2List[1] = [0]
dim $array[$1List[0] + $2List[0]]
for $i = 1 to $1List[0]
$array[$i-1] = $1List[$i]
Next
for $i = 1 to $2List[0]
$array[$i + $1List[0] - 1] = $2List[$i]
Next
Return $array
EndFunc
Re: [..] Alléger le contenu d'un dossier
Posté : mar. 17 déc. 2013 09:44
par brolee93
Je look ceci et je test . effectivement ça fait beaucoup moins de lignes ^^ J’espère surtout c'est que ça sera bien plus rapide .
Merci encore je go tester ceci.
UN GRAND MERCI
Il me retourne ce pb :
C:\_ApkTool_Team-ReDroiD\projects\framework-res.apk\resC:\Dropbox\Cours Lionel\auto-It\Light-App.au3 (51) : ==> Array variable subscript badly formatted.:
dim $array[$1List[0] + $2List[0]]
dim $array[^ ERROR
Re: [..] Alléger le contenu d'un dossier
Posté : mar. 17 déc. 2013 10:49
par bloodwolff
Ce sont des erreurs quand il ne trouve aucun fichier a supprimer dans un dossier
il suffit d'ajouter des vérifications
► Afficher le texte
Code : Tout sélectionner
#include <ButtonConstants.au3>
#include <ComboConstants.au3>
#include <GUIConstantsEx.au3>
#include <WindowsConstants.au3>
#include <File.au3>
#include <Array.au3>
$mainDir = FileSelectFolder("Choose a folder.", "C:\_ApkTool_Team-ReDroiD\projects\")
ConsoleWrite($mainDir)
$Form1 = GUICreate("Form1", 303, 48, 192, 124)
$Combo1 = GUICtrlCreateCombo("", 8, 8, 145, 25, BitOR($CBS_DROPDOWNLIST,$CBS_AUTOHSCROLL))
$Button1 = GUICtrlCreateButton("Nettoyer Doublon", 168, 8, 123, 25)
GUISetState(@SW_SHOW)
$listDir = _FileListToArray($mainDir, "*", 2)
$ComboDataText = ""
for $i = 1 to $listDir[0]
$ComboDataText &= "|" & $listDir[$i]
Next
GUICtrlSetData($Combo1, $ComboDataText, $listDir[1])
While 1
$nMsg = GUIGetMsg()
Switch $nMsg
Case $GUI_EVENT_CLOSE
Exit
Case $Button1
$dontTouchDir = GUICtrlRead($Combo1)
$dontTouchDirList = MultipleWildCardList($mainDir & "\" & $dontTouchDir, "*.png", "*.jpg")
for $i = 1 to $listDir[0]
if ($listDir[$i] <> $dontTouchDir) Then
$aDelFileList = MultipleWildCardList($mainDir & "\" & $listDir[$i], "*.png", "*.jpg")
[color=#FF0000] if Not @error Then[/color]
for $aDelFile in $aDelFileList
If _ArraySearch($dontTouchDirList, $aDelFile) <> -1 Then _
FileDelete($mainDir & "\" & $listDir[$i] & "\" & $aDelFile)
Next
[color=#FF0000] EndIf[/color]
EndIf
Next
GUIDelete()
MsgBox(0, "", "Doublons nettoyés!")
Exit
EndSwitch
WEnd
Func MultipleWildCardList($Path, $1, $2)
$1List = _FileListToArray($Path, $1, 1)
if @error Then dim $1List[1] = [0]
$2List = _FileListToArray($Path, $2, 1)
if @error Then dim $2List[1] = [0]
[color=#FF0000] If ($1List[0] + $2List[0]) == 0 Then
SetError(1)
Return ;
EndIf[/color]
dim $array[$1List[0] + $2List[0]]
for $i = 1 to $1List[0]
$array[$i-1] = $1List[$i]
Next
for $i = 1 to $2List[0]
$array[$i + $1List[0] - 1] = $2List[$i]
Next
Return $array
EndFunc
Re: [..] Alléger le contenu d'un dossier
Posté : mar. 17 déc. 2013 11:08
par brolee93
lol c'est un dossier qui contient plus de 2250fichiers png/jpg LOL
je vais tester avec vos mod
la c'est ok 23sec avec votre script

contre 12min avec le mien LOL la GIFLE ^^ aieee
Par contre est il possible qu'il évite un nettoyage dans les répertoire mipmap- xxxxx
Car ceux la j'aimerai les faire dans un second temps ?
Sinon pour nettoyer ensuite les dossiers vide ?
;Suppression des dossiers vide :
$size = DirGetSize($dirMIPMPAP_2)
If $size = 0 Then DirRemove($dirMIPMPAP_2)
il n'existe pas une fonction de ce type qui va supprimer tous les dossiers vide du au nettoyage des doublons ? dans le répertoire de base .
Merci pour tout franchement
Re: [..] Alléger le contenu d'un dossier
Posté : mar. 17 déc. 2013 11:28
par bloodwolff
Si ma supposition est bonne vous ne voulez que nettoyer les dossiers commençant par drawable- ?
Si oui la solution est plus bas
Pour le dirgetsize() vous aviez totalement raison il vous suffit de savoir ou le placez dans la boucle
► Afficher le texte
Code : Tout sélectionner
#include <ButtonConstants.au3>
#include <ComboConstants.au3>
#include <GUIConstantsEx.au3>
#include <WindowsConstants.au3>
#include <File.au3>
#include <Array.au3>
$mainDir = FileSelectFolder("Choose a folder.", "C:\_ApkTool_Team-ReDroiD\projects\")
ConsoleWrite($mainDir)
$Form1 = GUICreate("Form1", 303, 48, 192, 124)
$Combo1 = GUICtrlCreateCombo("", 8, 8, 145, 25, BitOR($CBS_DROPDOWNLIST,$CBS_AUTOHSCROLL))
$Button1 = GUICtrlCreateButton("Nettoyer Doublon", 168, 8, 123, 25)
GUISetState(@SW_SHOW)
[color=#FF0000]$listDir = _FileListToArray($mainDir, "drawable-*", 2)[/color]
$ComboDataText = ""
for $i = 1 to $listDir[0]
$ComboDataText &= "|" & $listDir[$i]
Next
GUICtrlSetData($Combo1, $ComboDataText, $listDir[1])
While 1
$nMsg = GUIGetMsg()
Switch $nMsg
Case $GUI_EVENT_CLOSE
Exit
Case $Button1
$dontTouchDir = GUICtrlRead($Combo1)
$dontTouchDirList = MultipleWildCardList($mainDir & "\" & $dontTouchDir, "*.png", "*.jpg")
for $i = 1 to $listDir[0]
if ($listDir[$i] <> $dontTouchDir) Then
$aDelFileList = MultipleWildCardList($mainDir & "\" & $listDir[$i], "*.png", "*.jpg")
if Not @error Then
for $aDelFile in $aDelFileList
If _ArraySearch($dontTouchDirList, $aDelFile) <> -1 Then _
FileDelete($mainDir & "\" & $listDir[$i] & "\" & $aDelFile)
Next
EndIf
[color=#FF0000] if (DirGetSize($listDir[0]) == 0) Then _
DirRemove($listDir[0])[/color]
EndIf
Next
GUIDelete()
MsgBox(0, "", "Doublons nettoyés!")
Exit
EndSwitch
WEnd
Func MultipleWildCardList($Path, $1, $2)
$1List = _FileListToArray($Path, $1, 1)
if @error Then dim $1List[1] = [0]
$2List = _FileListToArray($Path, $2, 1)
if @error Then dim $2List[1] = [0]
If ($1List[0] + $2List[0]) == 0 Then
SetError(1)
Return ;
EndIf
dim $array[$1List[0] + $2List[0]]
for $i = 1 to $1List[0]
$array[$i-1] = $1List[$i]
Next
for $i = 1 to $2List[0]
$array[$i + $1List[0] - 1] = $2List[$i]
Next
Return $array
EndFunc
Re: [..] Alléger le contenu d'un dossier
Posté : mar. 17 déc. 2013 12:49
par brolee93
Ouath récatif et opérationnel

j'adore . en plus ca fonctionne et c'est vachement rapide .
juste l'auto suppression des dossiers vide qui ne fonctionne pas je vais chercher un peu mais la au boulot il ne me laisse pas le temps lol .
Code : Tout sélectionner
if (DirGetSize($listDir[0]) == 0) Then _
DirRemove($listDir[0])
c'est plutôt :
Code : Tout sélectionner
if (DirGetSize($listDir[0]) == 0) Then _
DirRemove($listDir[$i])
et la c'est good
Maintenant c'est parfait qu'il enleve les doublons dans les dossiers :drawables-
Par contre une légere contrainte j'aimerai qu'il evite les dossiers qui se nomme "land" exemple drawables-land-xhdpi ou drawable-sw-350dp-land-xhdpi
mais la aucune idée :/
Re: [..] Alléger le contenu d'un dossier
Posté : mar. 17 déc. 2013 13:52
par GhostLine
J'utiliserai stringsplit , pour ma part, avec "land" comme délimiteur. Je te laisse zieuter l'aide de stringsplit pour voir ce que tu pourras en faire

Re: [..] Alléger le contenu d'un dossier
Posté : mer. 18 déc. 2013 00:54
par brolee93
GhostLine a écrit :J'utiliserai stringsplit , pour ma part, avec "land" comme délimiteur. Je te laisse zieuter l'aide de stringsplit pour voir ce que tu pourras en faire

Très bien la je suis dans un autre centre donc je me reinstall le tout pour voir voir tout ceci
ohhh ton stringslip j'y arrive pas lol ^^
et l'aide moue je vois pas trop d'aide lol enfin ce n'est pas super clair
Déjà assimilé tous ce splendide code me donne mal au crane lol
Edit :
Bon j'ai commencé et bien avancé now il fait tout tout seul

Merci encore c'est vraiment plaisant car cest super rapide ça déchire un grand Merci .
j'ai rajouter le scan des dossiers mipmap puis des dossiers raw et un déplacement temporaire des dossiers values (langues) dans un autre dossier car pour la recompile parfois il est nécessaire d'en récupérer quelques-un .
Maintenant je lutte pour trouvé comment lui dire de ne pas prendre en compte les dossiers drawable contenant le mot "land" je chercher je cherche mais bon je risque peux être de trouver lol

OU pas

Re: [..] Alléger le contenu d'un dossier
Posté : mer. 18 déc. 2013 01:21
par brolee93
Très sincèrement je suis perdu :/
Code : Tout sélectionner
$foundland = StringSplit ($mainDir& "\res" & "\" & $listDir[0] , "land" , 1)
_ArrayDisplay($foundland, "test" ,-1) ; AFFICHAGE LISTE COMPLETE
MsgBox(4096, "folder found:", $foundland[0])
Il m'affiche juste qu'il y a 10 dossiers mais moi je cela ne m'interesse pas lol sachant qu'il y a 3 dossiers "land"
Re: [..] Alléger le contenu d'un dossier
Posté : mer. 18 déc. 2013 03:42
par bloodwolff
brolee93 a écrit :Ouath récatif et opérationnel

j'adore . en plus ca fonctionne et c'est vachement rapide .
juste l'auto suppression des dossiers vide qui ne fonctionne pas je vais chercher un peu mais la au boulot il ne me laisse pas le temps lol .
Code : Tout sélectionner
if (DirGetSize($listDir[0]) == 0) Then _
DirRemove($listDir[0])
c'est plutôt :
Code : Tout sélectionner
if (DirGetSize($listDir[0]) == 0) Then _
DirRemove($listDir[$i])
et la c'est good
Maintenant c'est parfait qu'il enleve les doublons dans les dossiers :drawables-
Par contre une légere contrainte j'aimerai qu'il evite les dossiers qui se nomme "land" exemple drawables-land-xhdpi ou drawable-sw-350dp-land-xhdpi
mais la aucune idée :/
Bien vu, une petite erreur de ma part ^^ Faut dire que je test rarement ce que j'envoie
Pour le problème de land j'irais avec un truc du genre
► Afficher le texte
Code : Tout sélectionner
#include <ButtonConstants.au3>
#include <ComboConstants.au3>
#include <GUIConstantsEx.au3>
#include <WindowsConstants.au3>
#include <File.au3>
#include <Array.au3>
$mainDir = FileSelectFolder("Choose a folder.", "C:\_ApkTool_Team-ReDroiD\projects\")
ConsoleWrite($mainDir)
$Form1 = GUICreate("Form1", 303, 48, 192, 124)
$Combo1 = GUICtrlCreateCombo("", 8, 8, 145, 25, BitOR($CBS_DROPDOWNLIST,$CBS_AUTOHSCROLL))
$Button1 = GUICtrlCreateButton("Nettoyer Doublon", 168, 8, 123, 25)
GUISetState(@SW_SHOW)
$listDir = _FileListToArray($mainDir, "drawable-*", 2)
[color=#FF0000]For $i = $listDir[0] To 1 step -1
If StringInStr($listDir[$i], "land") <> 0 Then _
_ArrayDelete($listDir, $i)
Next[/color]
$ComboDataText = ""
for $i = 1 to $listDir[0]
$ComboDataText &= "|" & $listDir[$i]
Next
GUICtrlSetData($Combo1, $ComboDataText, $listDir[1])
While 1
$nMsg = GUIGetMsg()
Switch $nMsg
Case $GUI_EVENT_CLOSE
Exit
Case $Button1
$dontTouchDir = GUICtrlRead($Combo1)
$dontTouchDirList = MultipleWildCardList($mainDir & "\" & $dontTouchDir, "*.png", "*.jpg")
for $i = 1 to $listDir[0]
if ($listDir[$i] <> $dontTouchDir) Then
$aDelFileList = MultipleWildCardList($mainDir & "\" & $listDir[$i], "*.png", "*.jpg")
if Not @error Then
for $aDelFile in $aDelFileList
If _ArraySearch($dontTouchDirList, $aDelFile) <> -1 Then _
FileDelete($mainDir & "\" & $listDir[$i] & "\" & $aDelFile)
Next
EndIf
if (DirGetSize($listDir[0]) == 0) Then _
DirRemove($listDir[0])
EndIf
Next
GUIDelete()
MsgBox(0, "", "Doublons nettoyés!")
Exit
EndSwitch
WEnd
Func MultipleWildCardList($Path, $1, $2)
$1List = _FileListToArray($Path, $1, 1)
if @error Then dim $1List[1] = [0]
$2List = _FileListToArray($Path, $2, 1)
if @error Then dim $2List[1] = [0]
If ($1List[0] + $2List[0]) == 0 Then
SetError(1)
Return ;
EndIf
dim $array[$1List[0] + $2List[0]]
for $i = 1 to $1List[0]
$array[$i-1] = $1List[$i]
Next
for $i = 1 to $2List[0]
$array[$i + $1List[0] - 1] = $2List[$i]
Next
Return $array
EndFunc
Et sinon cela risque de mieux fonctionner encore
Code : Tout sélectionner
if (DirGetSize($listDir[[color=#FF0000]$i[/color]]) == 0) Then _
DirRemove($listDir[$i])
Re: [..] Alléger le contenu d'un dossier
Posté : mer. 18 déc. 2013 10:52
par brolee93
Tu ne test pas pourtant ça tourne vraiment pas mal Chapeau bas monsieur ;=)
et non j'ai cette erreur moi lol
(23) : ==> Array variable has incorrect number of subscripts or subscript dimension range exceeded.:
$ComboDataText &= "|" & $listDir[$i]
$ComboDataText &= "|" & ^ ERROR
->10:34:12 AutoIt3.exe ended.rc:1
avec ta manip "LAND"
sinon pour le delete ça n'a fonctionner qu'avec ceci :
Code : Tout sélectionner
if (DirGetSize($mainDir& "\res" & "\" & $listDir[$i]) == 0) Then _
DirRemove($mainDir& "\res" & "\" & $listDir[$i] , 1)
EndIf
Avec ceci pas d'erreur mais il supprimer tout de meme les fichiers dans les dossiers land :/
Code : Tout sélectionner
$listDir = _FileListToArray($mainDir & "\res", "drawable*", 2)
For $i = $listDir[0] To 1 step -1
If StringInStr($listDir[0], "land") <> 0 Then _
_ArrayDelete($listDir, $i)
Next
$ComboDataText = ""
Re: [..] Alléger le contenu d'un dossier
Posté : mer. 18 déc. 2013 12:02
par bloodwolff
Si vous avez besoin de rajouter le paramètre 1 à dirRemove ce n'est pas nécessairement une bonne nouvelle
Sois vos dossiers contiennent d'autre dossier vide sois il supprime des dossiers qui contiennent encore des images
Avec votre correction je vois que j'avais oublier de spécifier le chemin complet lors de cette commande, j'en suis désolé
Pour le second problème je présume qu'il supprimait bien les dossiers land quand il provoquait une erreur, il n'actualisais simplement pas le nombre de dossiers
Code : Tout sélectionner
For $i = $listDir[0] To 1 step -1
If StringInStr($listDir[$i], "land") <> 0 Then _
_ArrayDelete($listDir, $i)
Next
[color=#FF0000]$listDir[0] = UBound($listDir) - 1[/color]
Et par simple curiosité, si vous rajouter res dans les paths, pourquoi ne pas directement sélectionner ce dossier res au départ ?
Re: [..] Alléger le contenu d'un dossier
Posté : mer. 18 déc. 2013 12:30
par brolee93
► Afficher le texte
Code : Tout sélectionner
$mainDir = FileSelectFolder("Choose a folder.", "C:\_ApkTool_Team-ReDroiD\projects\")
ConsoleWrite($mainDir)
$Form1 = GUICreate("Form1", 303, 48, 192, 124)
$Combo1 = GUICtrlCreateCombo("", 8, 8, 145, 25, BitOR($CBS_DROPDOWNLIST,$CBS_AUTOHSCROLL))
$Button1 = GUICtrlCreateButton("Nettoyer Doublon", 168, 8, 123, 25)
GUISetState(@SW_SHOW)
$listDir = _FileListToArray($mainDir & "\res", "drawable-*", 2)
For $i = $listDir[0] To 1 step -1
If StringInStr($listDir[0], "land") <> 0 Then _
_ArrayDelete($listDir, $i)
Next
$ComboDataText = ""
for $i = 1 to $listDir[0]
$ComboDataText &= "|" & $listDir[$i]
Next
GUICtrlSetData($Combo1, $ComboDataText, $listDir[1])
While 1
$nMsg = GUIGetMsg()
Switch $nMsg
Case $GUI_EVENT_CLOSE
Exit
Case $Button1
$dontTouchDir = GUICtrlRead($Combo1)
$dontTouchDirList = MultipleWildCardList($mainDir& "\res" & "\" & $dontTouchDir, "*.png", "*.jpg")
for $i = 1 to $listDir[0]
if ($listDir[$i] <> $dontTouchDir) Then
$aDelFileList = MultipleWildCardList($mainDir& "\res" & "\" & $listDir[$i], "*.png", "*.jpg")
if Not @error Then
for $aDelFile in $aDelFileList
If _ArraySearch($dontTouchDirList, $aDelFile) <> -1 Then _
FileDelete($mainDir& "\res" & "\" & $listDir[$i] & "\" & $aDelFile)
Next
EndIf
if (DirGetSize($mainDir& "\res" & "\" & $listDir[$i]) == 0) Then _
DirRemove($mainDir& "\res" & "\" & $listDir[$i] , 1)
EndIf
Next
GUIDelete()
;~ MsgBox(0, "", "Doublons nettoyés! " & $dontTouchDir)
Exitloop
EndSwitch
WEnd
comme ça je selectionne le dossier de départ puis ensuite il rentre dans res automatiquement
EDIT
Cool maintenant votre modification fonctionne
► Afficher le texte
Code : Tout sélectionner
$listDir = _FileListToArray($mainDir & "\res", "drawable*", 2)
For $i = $listDir[0] To 1 step -1
If StringInStr($listDir[$i], "land") <> 0 Then _
_ArrayDelete($listDir, $i)
Next
$listDir[0] = UBound($listDir) - 1
$ComboDataText = ""
Re: [..] Alléger le contenu d'un dossier
Posté : jeu. 26 déc. 2013 11:50
par brolee93
Franchement j'ai rajouter quelques lignes et ce n'est que du bonheur

j'adore c'est vraiment super pratique et ça tourne au poil .
Un magnifique cadeau de noël . Joyeux Noël et merci beaucoup .
Edit :
Bon franchement je suis pas doué j'ai essayer pleins de manipulation pour maintenant supprimer les png/pjg dans les recpertoire contenant le mot Land mais pas moyen j'ai pourtant tenté avec tous les bouts de script précédent mais rien de fonctionne :/ une idée svp ?