Bonjour à tous,
je recherche le moyen d'insérer les fichiers, répertoires et sous répertoires d'un répertoire spécifié dans un Treeview.
Merci à tous.
Bonjour à tous,
je recherche le moyen d'insérer les fichiers, répertoires et sous répertoires d'un répertoire spécifié dans un Treeview.
Merci à tous.
Tu trouveras tout ce qu'il te faut dans le namspace System.IO pour parcourir ton arborescence. Puis tu génère ton treeview à la volée avec les données récupérées
Je veux remplir mon treeview ainsi :
mais il me génère ces erreurs :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5 foreach (string repertoire in repertoires) { TreeView1.Nodes.Add(repertoire); RechercheDossier(Path.Combine(s, repertoire)); }
Erreur 1 La méthode surchargée correspondant le mieux à 'System.Web.UI.WebControls.TreeNodeCollection.Add(System.Web.UI.WebControls.TreeNode)' possède des arguments non valides E:\Cours\Stage\safety-backup\sauvegarde.aspx.cs 66 13 E:\...\safety-backup\
et
Erreur 2 Argument '1' : impossible de convertir de 'string' en 'System.Web.UI.WebControls.TreeNode' E:\Cours\Stage\safety-backup\sauvegarde.aspx.cs 66 33 E:\...\safety-backup\
Ce n'est pas une chaine qu'il faut mettre en argument pour add?
La solution ici
http://www.developpez.net/forums/sho...light=treeview
Nouveau probleme :
je récupère bien tous les fichiers et tous les répertoires de mon dossier mais je n'arrive pas à bien les organiser dans mon treeview :
J'ai tous mes fichiers dans le premier noeud (normal avec le nodes[0]).
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16 fichiers = System.IO.Directory.GetFiles(s); repertoires = System.IO.Directory.GetDirectories(s); foreach (string fichier in fichiers) { TreeView1.Nodes[0].ChildNodes.Add(new System.Web.UI.WebControls.TreeNode(fichier)); System.IO.FileInfo fInfo = new System.IO.FileInfo(fichier); //code de traitement des fichiers } foreach (string repertoire in repertoires) { TreeView1.Nodes.Add(new System.Web.UI.WebControls.TreeNode(repertoire)); RechercheDossier(Path.Combine(s, repertoire)); }
Et je n'arrives pas à mettre mes sous répertoires au bon endroit.
En effet ici chaque répertoire créer un noeud parent.
Des solutions?
Tu réfléchis un peu avant de poser tes questions ou tu postes ton pb dès que tu le rencontres????![]()
![]()
Car là, c'est juste ton algo qui fait pas le boulot dans le bon ordre...
Et bien je n'ai pas de solutions, je trouve pas çà évident...![]()
Tu n'as qu'à faire une fonction récursive qui s'appelle pour chaque répertoire, et qui prend en paramètre le node dans lequel ajouter des éléments ainsi que le chemin vers le répertoire à traiter.
Besoin d'un MessageBox amélioré ? InformationBox pour .NET 1.1, 2.0, 3.0, 3.5, 4.0 sous license Apache 2.0.
Bonnes pratiques pour les accès aux données
Débogage efficace en .NET
LINQ to Objects : l'envers du décor
Mon profil LinkedIn - MCT - MCPD WinForms - MCTS Applications Distribuées - MCTS WCF - MCTS WCF 4.0 - MCTS SQL Server 2008, Database Development - Mon blog - Twitter
J'ai développé ce code mais il me met toujours une erreur :
Pour moi cela me parait correct pour l'affichage des répertoires et sous répertoires.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27 private void RechercheDossier(string s) { string[] repertoires; string[] fils; repertoires = System.IO.Directory.GetDirectories(s); //code de traitement des répertoires int i=0; if (repertoires.Length != 0) { foreach (string repertoire in repertoires) { TreeView1.Nodes.Add(new System.Web.UI.WebControls.TreeNode(repertoire)); fils = System.IO.Directory.GetDirectories(Path.Combine(s, repertoire)); if (fils.Length != 0) { foreach (string fil in fils) { TreeView1.Nodes[i].ChildNodes.Add(new System.Web.UI.WebControls.TreeNode(fil)); RechercheDossier(Path.Combine(s, repertoire + "\\" + fil)); } } i = i + 1; } } }
Qu'en pensez vous?
En générale, une boucle for dans un boucle récursive, n'est pas synonyme de mauvaix algo?
Et si tu utilises un index avec i... autant utiliser un for classique, plutot qu'un foreach...
Sinon c'est quoi l'erreur?![]()
L'erreur se trouve au chargement de ma page lorsque j'appelle ma procédure :
Voici l'erreur :
Code : Sélectionner tout - Visualiser dans une fenêtre à part RechercheDossier(this.Server.MapPath("\\monrepertoire\\"));
Description : Une exception non gérée s'est produite au moment de l'exécution de la demande Web actuelle. Contrôlez la trace de la pile pour plus d'informations sur l'erreur et son origine dans le code.
Détails de l'exception: System.InvalidOperationException: Échec lors du mappage du chemin d'accès '/monrepertoire/'.
Pour mon entier i, il est là pour indiquer sur quel noeud je veux ajouter un noeud enfant.
Code : Sélectionner tout - Visualiser dans une fenêtre à part TreeView1.Nodes[i].ChildNodes.Add(new System.Web.UI.WebControls.TreeNode(fil));
Toutes tes entrées sorties de prog doivent etre géré dans un try catch.
Et je pense qu'il ne trouve tout simplement pas le répertoire...
oui il trouve le répertoire car lorsque j'enlève la ligne qui crée la récursivité il m'affiche bien mes répertoires et sous répertoires mais il ne récupère pas toute l'arborescence.
Par exemple :
si le repertoire passé en paramètre contient ceci : monrepertoire/test/rep/rep2/
il m'affichera bien le répertoire test avant son enfant rep mais il me manquera rep2 et tous ces enfants.
Ce que je n'arrive pas, c'est afficher l'arborescence entière du répertoire sélectionné.
Voila pour vous:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20 private void RechercheDossier(string s,System.Web.UI.WebControls.TreeNode node) { //string[] fichiers; string[] repertoires; string[] tab_tmp; int k; repertoires = System.IO.Directory.GetDirectories(s); if (repertoires.Length != 0) { for (int i = 0; i < repertoires.Length; i++) { tab_tmp = repertoires[i].Split(Caractere_Separateur); k = tab_tmp.Length; node.ChildNodes.Add(new System.Web.UI.WebControls.TreeNode(tab_tmp[k-1])); RechercheDossier(Path.Combine(s, repertoires[i]),node.ChildNodes[i]); } } }
Partager