VB.NET Treeview du disque local (C:\)

Résolu
Bylliboy - 7 avril 2014 à 11:43
 Bylliboy - 8 avril 2014 à 16:04
Bonjour,
Voila j'essaye de de faire un treeview qui déploie le "Disque local (C) avec le contenu des dossiers et sous dossiers.

Je suis débutant et j'ai trouvé un script sur des forum (peut être ici d'ailleurs) qui affiche une arborescence et qui liste dans une listview le contenu du dossier sélectionné, exactement ce que je cherche même si je ne comprends pas tout le code.

Problème il n'affiche pas le C:\

Voici le code:

Imports System.IO
Public Class Form1

Private Sub ListView1_SelectedIndexChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles ListView1.SelectedIndexChanged

End Sub

Private Sub PopulateTreeView()
Dim rootNode As TreeNode

Dim info As New DirectoryInfo("../..")


If info.Exists Then

rootNode = New TreeNode(info.Name)
rootNode.Tag = info
GetDirectories(info.GetDirectories(), rootNode)
TreeView1.Nodes.Add(rootNode)
End If

End Sub

Private Sub GetDirectories(ByVal subDirs() As DirectoryInfo, ByVal nodeToAddTo As TreeNode)

Dim aNode As TreeNode
Dim subSubDirs() As DirectoryInfo
Dim subDir As DirectoryInfo
For Each subDir In subDirs
aNode = New TreeNode(subDir.Name, 0, 0)
aNode.Tag = subDir
aNode.ImageKey = "folder"
subSubDirs = subDir.GetDirectories()
If subSubDirs.Length <> 0 Then
GetDirectories(subSubDirs, aNode)
End If
nodeToAddTo.Nodes.Add(aNode)
Next subDir

End Sub

Public Sub New()
InitializeComponent()
PopulateTreeView()

End Sub 'New

Private Sub treeView1_NodeMouseClick(ByVal sender As Object, ByVal e As TreeNodeMouseClickEventArgs) Handles TreeView1.NodeMouseClick

Dim newSelected As TreeNode = e.Node
ListView1.Items.Clear()
Dim nodeDirInfo As DirectoryInfo = CType(newSelected.Tag, DirectoryInfo)
Dim subItems() As ListViewItem.ListViewSubItem
Dim item As ListViewItem = Nothing

Dim dir As DirectoryInfo
For Each dir In nodeDirInfo.GetDirectories()
item = New ListViewItem(dir.Name, 0)
subItems = New ListViewItem.ListViewSubItem() {New ListViewItem.ListViewSubItem(item, "Directory"), New ListViewItem.ListViewSubItem(item, _
dir.LastAccessTime.ToShortDateString())}

item.SubItems.AddRange(subItems)
ListView1.Items.Add(item)
Next dir
Dim file As FileInfo
For Each file In nodeDirInfo.GetFiles()
item = New ListViewItem(file.Name, 1)
subItems = New ListViewItem.ListViewSubItem() {New ListViewItem.ListViewSubItem(item, "File"), New ListViewItem.ListViewSubItem(item, _
file.LastAccessTime.ToShortDateString())}

item.SubItems.AddRange(subItems)
ListView1.Items.Add(item)
Next file

ListView1.AutoResizeColumns(ColumnHeaderAutoResizeStyle.HeaderSize)

End Sub

Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load

End Sub
End Class

Le code tel quel affiche l'arborescence du programme courant, c'est à dire du WindowsApplication1.

J'ai essayé de remplacé dans le code (../..) par (C:\) mais il me met le message d'erreur suivant:


Depuis mon PC maison:

"Une erreur s'est produite lors de la création du formulaire. Pour plus d'informations, consultez Exception.InnerException. L'erreur est : L'accès au chemin d'accès 'C:\$Recycle.Bin\S-1-5-20' est refusé."

Depuis mon PC Professionnel
Une erreur s'est produite lors de la création du formulaire. Pour plus d'informations, consultez Exception.InnerException. L'erreur est : L'accès au chemin d'accès 'C:\Document and setting' est refusé. (alors que je suis sous W7 et administrateur de mon poste).

En remplaçant "../.." par "../../../.." ça me met le desktop mais avec seulement mes dossiers et fichiers et pas mes raccourci comme "ordinateur" qui correspond au "c:\".

Je précise que je suis admin de mes pc


merci de m'aider.

2 réponses

cs_Le Pivert Messages postés 7903 Date d'inscription jeudi 13 septembre 2007 Statut Contributeur Dernière intervention 11 mars 2024 137
8 avril 2014 à 14:50
Bonjour,

Tu peux toujours voir l'arborescence de tes images:

 Dim info As New DirectoryInfo("C:\Users\Utilisateur\Pictures")


Ensuite tu mets ceci pour la listview:

  Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
ListView1.CheckBoxes = True
ListView1.View = View.List
End Sub

Si tu veux voir les images c'est autre chose. Il faut un code plus complet
0
Merci pour ta proposition mais seul le treeview du C m'intéresse.

Pour info on vient de me donner l'astuce (source msdn.microsoft)
en utilisant le try catch...
La partie de mon code corrigé:

Private Sub GetDirectories(ByVal subDirs() As DirectoryInfo, ByVal nodeToAddTo As TreeNode)

Dim aNode As TreeNode
Dim subSubDirs() As DirectoryInfo
Dim subDir As DirectoryInfo
For Each subDir In subDirs
aNode = New TreeNode(subDir.Name, 0, 0)
aNode.Tag = subDir
aNode.ImageKey = "folder"
Try
subSubDirs = subDir.GetDirectories()
Catch e As UnauthorizedAccessException
subSubDirs = Nothing
End Try
If Not subSubDirs Is Nothing Then
If subSubDirs.Length <> 0 Then
GetDirectories(subSubDirs, aNode)
End If
End If
nodeToAddTo.Nodes.Add(aNode)
Next subDir

End Sub

Merci à Gilles de Microsoft
0
Rejoignez-nous