Autor Beitrag
DidiD
Hält's aus hier
Beiträge: 1



BeitragVerfasst: Sa 31.03.12 16:51 
Hey Leute,

der Titel spricht eig. schon für sich! Also ich versuche gerade eine Ausgabe meiner Laufwerke zu machen, inklusive der Möglichkeit, dass man die ganze Ordnerstruktur jeder Partition anschauen kann. Ich bin auch absoluter C#-Neuling, also habt etwas verständnis für mich =)

Folgenden Code habe ich soweit in der Vorlesung mitgeschrieben, selbst ergänzt usw., Ist also definitiv fehlerhaft! Macht das so auch nur im geringsten Sinn, oder gehe ich so schn ganz falsch an das Problem heran.....?

Erstmal folgendes problem, ich will, dass alle Laufwerke ausgelesen werden (direkt, also per onload oder sowas), weiß jemand wie ich das anstelle? Angezeigt wird so nämlich noch nichts (da ja per "AfterSelect" geladen wird, was auch immer das ist. )
Mir unverständliche stellen haben ich mal in rot markiert =)

ausblenden volle Höhe C#-Quelltext
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:
28:
29:
30:
31:
32:
33:
34:
35:
36:
37:
38:
39:
40:
41:
42:
43:
44:
45:
46:
47:
48:
49:
50:
51:
52:
53:
54:
55:
56:
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.IO;

namespace WindowsFormsApplication1
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }

        private void eingabeB_Click(object sender, EventArgs e)
        {
            Form2 form = new Form2();
            form.Show();
            MessageBox.Show("Bla Blub""Titel", MessageBoxButtons.OK, MessageBoxIcon.Exclamation);
        }
        
        private void treeView1_AfterSelect(object sender, TreeViewEventArgs e)
        {
            DriveInfo[] drives = DriveInfo.GetDrives();

            foreach (DriveInfo item in drives)
            {
                DirectoryInfo di = item.RootDirectory;
                FileInfo[] files = di.GetFiles();

                try
                {
                    files = di.GetFiles();

                    foreach (FileInfo fi in files)
                    { Console.WriteLine(fi.FullName); }
                }
                catch (Exception ex)
                {
                    Logger.LogData("Fehler beim Auslesen der Dateien.Exception Verzeichnis: " + item.RootDirectory); continue;
                }

                foreach (DirectoryInfo di2 in di.GetDirectories())
                {
                    Laufwerke.Nodes.Add(new TreeNode(di2.FullName));
                    di2.GetFiles();
                }
            }
        }
    }
}

Ich danke euch bereits vielmals für eure Hilfe!!!!

Grüße, Didi

Moderiert von user profile iconChristian S.: C#-Tags hinzugefügt
Moderiert von user profile iconTh69: Beitragsformatierung überarbeitet.
Th69
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Moderator
Beiträge: 4798
Erhaltene Danke: 1059

Win10
C#, C++ (VS 2017/19/22)
BeitragVerfasst: So 01.04.12 11:17 
Hallo DidiD :welcome:

das AfterSelect-Ereignis wird ausgeführt, nachdem man einen Eintrag im TreeView ausgewählt (selektiert) hat. Da dein TreeView aber noch leer ist, kann dieses Ereignis bisher nie ausgeführt werden.

Verschiebe einfach deinen Code in eine eigene Methode und rufe diese direkt im Konstruktor deiner Form auf:
ausblenden C#-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
public Form1()
{
    InitializeComponent();

    ReadDrives();
}

private void ReadDrives()
{
  // hier der Code aus dem bisherigen AfterSelect-Ereignis
}

Wobei du den bisherigen Code noch inhaltlich überarbeiten mußt - als erstes füge mal für jedes Laufwerk (Drive) ein TreeViewItem hinzu (und kommentiere den restlichen Code mal aus!).

Die ganze Ordnerstruktur in einen TreeView auf einmal einzulesen macht jedoch keinen Sinn (da dies viel zu lange dauern würde!).
Üblicherweise arbeitet man hier so, daß man im AfterExpand-Ereignis die Unterknoten explizit einliest.
Als Optimierung kann man noch so arbeiten, daß man nur dann Ordner neu einliest, wenn bisher noch keine Einträge im TrreView dafür angelegt wurden (dann sollte man jedoch auch einen 'Refresh'-Funktionalität einbauen) - dies ist jedoch für dich als Anfänger noch nicht empfehlenswert. (Diesbzgl. gab es unter TreeView Bezeichnung der Laufwerke eine weitergehende Diskussion).