2013-05-01 9 views
5

Qui di seguito è il mio codiceCome visualizzare le directory in un TreeView?

DirectoryInfo directoryInfo = new DirectoryInfo(@"C:\Users\Shahul\Documents\Visual Studio 2010\Projects\TreeView\TreeView\bin\FileExplorer"); 

private void Form1_Load(object sender, EventArgs e) 
{ 
    if (Directory.Exists("FileExplorer")) 
    { 
     try 
     { 
      DirectoryInfo[] directories = directoryInfo.GetDirectories(); 

      foreach (FileInfo file in directoryInfo.GetFiles()) 
      { 
       if (file.Exists) 
       { 
        TreeNode nodes = treeView.Nodes[0].Nodes.Add(file.Name); 
       } 
      } 

      if (directories.Length > 0) 
      { 
       foreach (DirectoryInfo directory in directories) 
       { 
        TreeNode node = treeView.Nodes[0].Nodes.Add(directory.Name); 
        node.ImageIndex = node.SelectedImageIndex = 0; 
        foreach (FileInfo file in directory.GetFiles()) 
        { 
         if (file.Exists) 
         { 
          TreeNode nodes = treeView.Nodes[0].Nodes[node.Index].Nodes.Add(file.Name); 
         } 
        } 
       } 
      } 
     } 
     catch (Exception ex) 
     { 
      MessageBox.Show(ex.Message); 
     } 
    } 
} 

Quando eseguo ottengo solo una forma ad albero in bianco? Incapace di capire qual è l'errore?

Questo è il mio primo post in Stack Overflow.

+0

Ho copiato il codice e sembra di essere al lavoro da parte mia. (Oltre a ricevere avvisi su alcune cartelle che sono illeggibili a causa dei diritti di accesso) A proposito, prova a rendere questa funzione ricorsiva per aggiungere nodi e quant'altro. Potrebbe darti una migliore chiarezza di ciò che sta accadendo e dove potrebbe essere il tuo errore. Inoltre, si impostano nodi variabili con cui non si esegue alcuna operazione (i nodi TreeNode vengono assegnati ma non vengono utilizzati). –

+0

Eseguire il debug e assicurarsi che l'albero contenga elementi prima che la funzione ritorni. Forse stai aggiungendo i nodi all'albero sbagliato. Forse l'albero viene ripulito da qualche parte subito dopo. Debug. – SimpleVar

risposta

6

Questo dovrebbe risolvere il tuo problema, ho provato il WinForm però:

public Form1() 
    { 
     InitializeComponent(); 

     DirectoryInfo directoryInfo = new DirectoryInfo(@"C:\Users\hikuma\Documents\IR"); 
     if (directoryInfo.Exists) 
     { 
      treeView1.AfterSelect += treeView1_AfterSelect; 
      BuildTree(directoryInfo, treeView1.Nodes); 
     } 
    } 

    private void BuildTree(DirectoryInfo directoryInfo, TreeNodeCollection addInMe) 
    { 
     TreeNode curNode = addInMe.Add(directoryInfo.Name); 

     foreach (FileInfo file in directoryInfo.GetFiles()) 
     { 
      curNode.Nodes.Add(file.FullName, file.Name); 
     } 
     foreach (DirectoryInfo subdir in directoryInfo.GetDirectories()) 
     { 
      BuildTree(subdir, curNode.Nodes); 
     } 
    } 

    private void treeView1_AfterSelect(object sender, TreeViewEventArgs e) 
    { 
     if(e.Node.Name.EndsWith("txt")) 
     { 
      this.richTextBox1.Clear(); 
      StreamReader reader = new StreamReader(e.Node.Name); 
      this.richTextBox1.Text = reader.ReadToEnd(); 
      reader.Close(); 
     } 
    } 

Si tratta di un semplice esempio di come è possibile aprire il file in un rigoglioso casella di testo, può essere migliorato molto :). Potresti voler contrassegnare come risposta o votare se ha aiutato :) !!

+0

grazie mille ha risolto il problema. Un altro aiuto rapido come faccio a visualizzare il contenuto in una casella di testo rich ie consente di dire sotto la struttura della cartella treeview ho alcuni file di blocco note nel momento in cui seleziono qualsiasi blocco note o doppio clic deve visualizzare il contenuto in una casella di testo ... –

+0

Grazie per il tuo aiuto, ho appena incollato il codice sul mio modulo che compila senza alcun problema. Tuttavia quando clicco sul mio file di testo visualizzato nella struttura della mia struttura ad albero non viene visualizzato nulla in richtextbox. Ho alcuni contenuti nel mio file di testo –

+0

Aggiungi una casella di testo nel modulo e visualizzerà il contenuto del file nella casella di testo ... –

0

Prova questo: (nota verificare che la posizione DirectoryInfo contiene alcune cartelle)

DirectoryInfo directoryInfo = new DirectoryInfo(@"C:\Users\Shahul\Documents\Visual Studio 2010\Projects\TreeView\TreeView\bin\FileExplorer"); 

private void Form1_Load(object sender, EventArgs e) 
{ 
    if (directoryInfo.Exists) 
    { 
     try 
     { 
      treeView.Nodes.Add(directoryInfo.Name); 
      DirectoryInfo[] directories = directoryInfo.GetDirectories(); 

      foreach (FileInfo file in directoryInfo.GetFiles()) 
      { 
       if (file.Exists) 
       { 
        TreeNode nodes = treeView.Nodes[0].Nodes.Add(file.Name); 
       } 
      } 


      if (directories.Length > 0) 
      { 
       foreach (DirectoryInfo directory in directories) 
       { 
        TreeNode node = treeView.Nodes[0].Nodes.Add(directory.Name); 
        node.ImageIndex = node.SelectedImageIndex = 0; 
        foreach (FileInfo file in directory.GetFiles()) 
        { 
         if (file.Exists) 
         { 
          TreeNode nodes = treeView.Nodes[0].Nodes[node.Index].Nodes.Add(file.Name); 
         } 
        } 
       } 
      } 
     } 
     catch (Exception ex) 
     { 
      MessageBox.Show(ex.Message); 
     } 
    } 
} 
+0

Ho appena provato il tuo codice ancora ho lo stesso problema .. –

0

DirectoryInfo.Exists ("FileExplorer") sarà verificare la presenza di "C: \ Users \ Shahul \ Documenti \ Visual Studio 2010 \ Progetti \ TreeView \ TreeView \ bin \ debug \ FileExplorer ", non" C: \ Users \ Shahul \ Documents \ Visual Studio 2010 \ Projects \ TreeView \ TreeView \ bin \ FileExplorer ", quando si esegue in modalità di debug.

0

provare quanto segue:

private void Form1_Load(object sender, EventArgs e) 
    { 
     if (directoryInfo.Exists) 
     { 
      try 
      { 
       treeView.Nodes.Add(LoadDirectory(directoryInfo));      
      } 
      catch (Exception ex) 
      { 
       MessageBox.Show(ex.Message); 
      } 
     } 
    } 

    private TreeNode LoadDirectory(DirectoryInfo di) 
    { 
     if (!di.Exists) 
      return null; 

     TreeNode output = new TreeNode(di.Name, 0, 0); 

     foreach (var subDir in di.GetDirectories()) 
     { 
      try 
      { 
       output.Nodes.Add(LoadDirectory(subDir)); 
      } 
      catch (IOException ex) 
      { 
       //handle error 
      } 
      catch { } 
     } 

     foreach (var file in di.GetFiles()) 
     { 
      if (file.Exists) 
      { 
       output.Nodes.Add(file.Name); 
      } 
     } 

     return output; 
    } 
} 

E 'meglio dividere la directory di analisi in un metodo ricorsivo in modo che si può andare fino in fondo l'albero.

Questo bloccherà l'interfaccia utente fino a quando è completamente carica - ma di fissaggio che è oltre la portata di questa risposta ...

:)

+0

Grazie per l'aiuto :-) Ho risolto il problema –

+0

Nessun problema! In futuro, assicurati di farci sapere se stai lavorando con Winforms/WPF, poiché gestiscono le cose in modo diverso. – Chemass

+0

Ok, certo ...... –

Problemi correlati