[..] Listes de dossier et sous dossier

Aide et conseils concernant AutoIt et ses outils.
Règles du forum
.
Répondre
adri0726
Niveau 1
Niveau 1
Messages : 10
Enregistré le : lun. 05 mai 2014 13:34
Status : Hors ligne

[..] Listes de dossier et sous dossier

#1

Message par adri0726 »

Bonjour à tous.

J’avais besoin d'afficher dans un listview le contenu d'un dossier et de ces sous dossier mais pas de façon recursive.

jusqu’à maintenant j'ai utilisé cette fonction :

Code : Tout sélectionner

Func _Explorateur_Create($flag = 0, $sFolder = GUICtrlRead($Cmb_Folder), $GuiRead_Lvl = GUICtrlRead($Inp_Lvl), $sMask = GUICtrlRead($Inp_Ext))
	Local $Files_Lvl_0, $Folder_Lvl_0, $Folder_Lvl_1, $Folder_Lvl_2, $Folder_Lvl_3, $Folder_Lvl_4


			$LIndex = 0
			$arr_Listview_ItemPAth = 0
			Dim $arr_Listview_ItemPAth[0]
			_GUICtrlListView_DeleteAllItems($ListView1)
			If Not _IsChecked($Check_Recursive) Then
				If $GuiRead_Lvl >= 0 Then
					_ListViewAddFiles(_FileListToArrayRec($sFolder, $sMask, 1, 0, 1, 2))
					If $GuiRead_Lvl > 0 Then
						$Folder_Lvl_1 = _FileListToArrayRec($sFolder, "*", 2, 0, 1, 2)
						For $j = 1 To UBound($Folder_Lvl_1) - 1
							_ListViewAddFiles(_FileListToArrayRec($Folder_Lvl_1[$j], $sMask, 1, 0, 1, 2))
							If $GuiRead_Lvl > 1 Then
								$Folder_Lvl_2 = _FileListToArrayRec($Folder_Lvl_1[$j], "*", 2, 0, 1, 2)
								For $k = 1 To UBound($Folder_Lvl_2) - 1
									_ListViewAddFiles(_FileListToArrayRec($Folder_Lvl_2[$k], $sMask, 1, 0, 1, 2))
									If $GuiRead_Lvl > 2 Then
										$Folder_Lvl_3 = _FileListToArrayRec($Folder_Lvl_2[$k], "*", 2, 0, 1, 2)
										For $L = 1 To UBound($Folder_Lvl_3) - 1
											_ListViewAddFiles(_FileListToArrayRec($Folder_Lvl_3[$L], $sMask, 1, 0, 1, 2))
											If $GuiRead_Lvl > 3 Then
												$Folder_Lvl_4 = _FileListToArrayRec($Folder_Lvl_3[$L], "*", 2, 0, 1, 2)
												For $m = 1 To UBound($Folder_Lvl_4) - 1
													_ListViewAddFiles(_FileListToArrayRec($Folder_Lvl_4[$m], $sMask, 1, 0, 1, 2))
												Next
											EndIf
										Next
									EndIf
								Next
							EndIf
						Next
					EndIf
				EndIf
			ElseIf _IsChecked($Check_Recursive) Then
				_ListViewAddFiles(_FileListToArrayRec($sFolder, $sMask, 1, 1, 1, 2))
			EndIf
EndFunc	

Func _ListViewAddFiles($FileList)
	Local $hIcon, $sAtrib, $sDrive = "", $sDir = "", $sFileName = "", $sExtension = ""

	For $n = 1 To UBound($FileList) - 1
		$File_Name = $FileList[$n]
		If StringInStr($File_Name, "_stripped", 2) Then ContinueLoop
		_PathSplit($File_Name, $sDrive, $sDir, $sFileName, $sExtension)
		$hIcon = _WinAPI_ShellExtractAssociatedIcon($File_Name, 1)
		$Index = _GUIImageList_ReplaceIcon($hImage, -1, $hIcon)
		_PathSplit($File_Name, $sDrive, $sDir, $sFileName, $sExtension)
		_ArrayAdd($arr_Listview_ItemPAth, $File_Name)
		_GUICtrlListView_AddItem($ListView1, $sFileName & $sExtension, _GUIImageList_GetImageCount($hImage) - 1)
		$LIndex += 1
	Next
	_WinAPI_DestroyIcon($hIcon)

EndFunc   ;==>_ListViewAdd_FilesAndFolder		
Mon problème est que je me suis limité à 4 niveau et si je veux augmenter je dois en rajouter un, je voudrais pouvoir modifier le code afin de ne pas avoir de limite mais en gardant le nombre de niveau indiquer dans l'input.
J’ai essayé différentes façon d’écrire ça mais je n'ai pas encore trouvé, j'espère que vous pourrez m'aider, Merci d'avance
Avatar du membre
mikell
Spammer !
Spammer !
Messages : 6292
Enregistré le : dim. 29 mai 2011 17:32
Localisation : Deep Cévennes
Status : Hors ligne

Re: [..] Listes de dossier et sous dossier

#2

Message par mikell »

_FileListToArrayRec
$iRecur [optional] Specifies whether to search recursively in subfolders and to what level
$FLTAR_NORECUR (0) - Do not search in subfolders (Default)
$FLTAR_RECUR (1) - Search in all subfolders (unlimited recursion)
Negative integer - Search in subfolders to specified depth
" L'échec est le fondement de la réussite. " (Lao-Tseu )
" Plus ça rate, plus on a de chances que ça marche " (les Shadoks )
Répondre