Page 1 sur 1

[..] Listes de dossier et sous dossier

Posté : jeu. 28 janv. 2016 18:40
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

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

Posté : jeu. 28 janv. 2016 21:56
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