private void ShowSharedFolders()
        {
            for (int i = 0; i < tvnfs.Nodes[0].Nodes.Count; i++)
            {
                List <string> networkfolders = LocalNetworkFunctions.GetListOfSharedFolders(LocalNetworkFunctions.GetIPAdressFromMachineName(tvnfs.Nodes[0].Nodes[i].Text));
                foreach (string entry in networkfolders)
                {
                    if (entry.Contains("ERROR") == false)
                    {
                        try
                        {
                            TreeNode n = new TreeNode(entry);
                            n.ImageIndex         = 2;
                            n.SelectedImageIndex = 2;
                            tvnfs.Nodes[0].Nodes[i].Nodes.Add(n);
                        }
                        catch { }
                    }
                    else
                    {
                        System.Diagnostics.Debug.Print("Fehler beim Zugriff auf Netzwerk-Ordner");
                        System.Diagnostics.Debug.Print("IP: " + LocalNetworkFunctions.GetIPAdressFromMachineName(tvnfs.Nodes[0].Nodes[i].Text));
                        System.Diagnostics.Debug.Print("PC-Name: " + tvnfs.Nodes[0].Nodes[i].Text);
                        System.Diagnostics.Debug.Print("Error-Code: " + entry.Substring(entry.IndexOf("=") + 1));
                        //Anhand der Message den Fehler anzeigen
                        if (entry.Substring(entry.IndexOf("=") + 1) == "5")
                        {
                            System.Diagnostics.Debug.Print("Fehler: Access Denied");
                        }
                        else if (entry.Substring(entry.IndexOf("=") + 1) == "53")
                        {
                            System.Diagnostics.Debug.Print("Fehler: Bad Network Path");
                        }
                    }
                }

                //Der nächste Schritt ist zu scannen, welche Freigaben noch Unterordner hat, auf die zugegriffen werden kann.
                //wenn dies der Fall ist, soll ein Temp-Node angelegt werden
                if (tvnfs.Nodes[0].Nodes[i].Nodes.Count > 0)
                {
                    for (int j = 0; j < tvnfs.Nodes[0].Nodes[i].Nodes.Count; j++)
                    {
                        //Der Netzwerkpfad
                        string p = @"\\" + LocalNetworkFunctions.GetIPAdressFromMachineName(tvnfs.Nodes[0].Nodes[i].Text) + @"\" + tvnfs.Nodes[0].Nodes[i].Nodes[j].Text;
                        if (DirectoryFunctions.HasSubDirectories(p))
                        {
                            tvnfs.Nodes[0].Nodes[i].Nodes[j].Nodes.Add(TREENODE_DIRSUB);
                        }
                    }
                }
            }
        }
        public void LoadDrives()
        {
            //Erstmal müssen alle Nodes aus der TreeView entfernt werden, bevor die Drives angezeigt werden können

            tvfilesystem.Nodes.Clear();
            tvfilesystem.ImageList.Images.Clear();

            //Die Standardicons aus der Klasse 'FilesystemIcons' einfügen, damit diese nicht ständig nachgeladen werden müssen
            imglist.Images.Add(FilesystemIcons.ICON_DIRECTORY_16x); //Index 0

            //Nun werden alle Drives geladen und angezeigt
            foreach (DriveInfo drive in DriveInfo.GetDrives())
            {
                //Jetzt muss geschaut werden, ob der Drive aktiv ist oder nicht und danach entschieden werden
                if (drive.IsReady)
                {
                    //Icon ermitteln
                    imglist.Images.Add(FilesystemIcons.GetSmallIcon(string.Concat(drive.Name.Substring(0, 2) + DS)));

                    //TreeNode erstellen und hinzufügen
                    TreeNode n = new TreeNode(string.Concat(drive.Name.Substring(0, 2), " ", DriveFunctions.GetVolumeLabel(Convert.ToChar(drive.Name.Substring(0, 1)))));
                    n.ImageIndex         = tvfilesystem.ImageList.Images.Count - 1;
                    n.SelectedImageIndex = tvfilesystem.ImageList.Images.Count - 1;
                    tvfilesystem.Nodes.Add(n);

                    //Prüfen, ob das Drive über Ordner verfügt
                    if (DirectoryFunctions.HasSubDirectories(drive.Name.Substring(0, 2) + DS))
                    {
                        //Wenn es über Ordner verfügt, soll der tenporäre TreeNode geadded werden
                        //Das ist dann für das generieren der Subnodes notwendig
                        tvfilesystem.Nodes[tvfilesystem.Nodes.Count - 1].Nodes.Add(TREENODE_DIRSUB);
                    }
                }
                else
                {
                    //TreeNode erstellen und hinzufügen
                    imglist.Images.Add(FilesystemIcons.GetSmallIcon(string.Concat(drive.Name.Substring(0, 2) + DS)));
                    TreeNode n = new TreeNode(string.Concat(drive.Name.Substring(0, 2), DS));
                    n.ImageIndex         = tvfilesystem.ImageList.Images.Count - 1;
                    n.SelectedImageIndex = tvfilesystem.ImageList.Images.Count - 1;
                    tvfilesystem.Nodes.Add(n);
                }
            }
        }
        /// <summary>
        /// Prüft, ob die Drives noch vorhanden sind. Wenn nicht, sollen diese vernichtet werden
        /// </summary>
        private void Thread_CheckDrives()
        {
            //Liste mit allen Drives laden
            string[] driveold = new string[tvfilesystem.Nodes.Count];
            for (int i = 0; i < tvfilesystem.Nodes.Count; i++)
            {
                driveold[i] = tvfilesystem.Nodes[i].Text;
            }

            //Alle Drives jetzt prüfen
            bool isfound = false;

            foreach (DriveInfo drvinfo in DriveInfo.GetDrives())
            {
                isfound = false;
                //jetzt wird überprüft, ob der Eintrag gefunden wurde
                for (int i = 0; i < driveold.Length; i++)
                {
                    //Wenn das Laufwerk gefunden wurde
                    if (driveold[i] != "")
                    {
                        if (driveold[i].Substring(0, 1) == drvinfo.Name.Substring(0, 1))
                        {
                            driveold[i] = "";
                            isfound     = true;
                            break; //For-Schleife kann verlassen werden
                        }
                    }
                }

                if (isfound == false) //wenn das Laufwerk nicht gefunden wurde, dann soll es hinzugefügt werden
                {
                    //Jetzt muss geschaut werden, ob der Drive aktiv ist oder nicht und danach entschieden werden
                    if (drvinfo.IsReady)
                    {
                        //Icon ermitteln
                        imglist.Images.Add(FilesystemIcons.GetSmallIcon(string.Concat(drvinfo.Name.Substring(0, 2) + DS)));

                        //TreeNode erstellen und hinzufügen
                        TreeNode n = new TreeNode(string.Concat(drvinfo.Name.Substring(0, 2), " ", DriveFunctions.GetVolumeLabel(Convert.ToChar(drvinfo.Name.Substring(0, 1)))));
                        n.ImageIndex         = tvfilesystem.ImageList.Images.Count - 1;
                        n.SelectedImageIndex = tvfilesystem.ImageList.Images.Count - 1;
                        tvfilesystem.Nodes.Add(n);

                        //Prüfen, ob das Drive über Ordner verfügt
                        if (DirectoryFunctions.HasSubDirectories(drvinfo.Name.Substring(0, 2) + DS))
                        {
                            //Wenn es über Ordner verfügt, soll der tenporäre TreeNode geadded werden
                            //Das ist dann für das generieren der Subnodes notwendig
                            tvfilesystem.Nodes[tvfilesystem.Nodes.Count - 1].Nodes.Add(TREENODE_DIRSUB);
                        }
                    }
                    else
                    {
                        //TreeNode erstellen und hinzufügen
                        imglist.Images.Add(FilesystemIcons.GetSmallIcon(string.Concat(drvinfo.Name.Substring(0, 2) + DS)));
                        TreeNode n = new TreeNode(string.Concat(drvinfo.Name.Substring(0, 2), DS));
                        n.ImageIndex         = tvfilesystem.ImageList.Images.Count - 1;
                        n.SelectedImageIndex = tvfilesystem.ImageList.Images.Count - 1;
                        tvfilesystem.Nodes.Add(n);
                    }
                }
            }

            //Prüfen, ob noch Einträge in dem Array nicht geleert wurden. Wenn welche gefunden wurden, müssen diese vernichtet werden
            for (int i = driveold.Length; i > 0; i--)
            {
                if (driveold[i - 1] != "") //Wenn das laufwerk in der Liste noch da ist, aber nicht mehr da ist, wird es gelöscht
                {
                    tvfilesystem.Nodes.RemoveAt(i - 1);
                }
            }
        }