private void LoadStorageInfo()
        {
            System.IO.DriveInfo drvinfo = new System.IO.DriveInfo(driveletter.ToString());
            picimage.BackgroundImage = FilesystemIcons.GetLargeIcon(drvinfo.Name.Substring(0, 2) + @"\").ToBitmap();

            //Daten eintragen
            lbdrivename.Text = DriveFunctions.GetVolumeLabel(driveletter) + " (" + driveletter.ToString().ToUpper() + ":)";
            lbmodel.Text     = DriveFunctions.GetDriveModelName(DriveFunctions.GetPartitionData(driveletter.ToString())[0]);
            lbdiskindex.Text = "Disk-Index: " + DriveFunctions.GetPartitionData(driveletter.ToString())[0];
            lbpartindex.Text = "Partition-Index: " + DriveFunctions.GetPartitionData(driveletter.ToString())[1];
        }
        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);
                }
            }
        }
        public void GenerateSubNodes(ref TreeNode tn, string pfad, bool hidesystemfolders)
        {
            //Erst kommen die Prüfungen. Damit neue Nodes generiert werden, darf
            //NUR der TreeNode .dirsub da sein. Ansonsten wird nichts geladen (Caching)
            if (tn.Nodes.Count == 1 && tn.Nodes[0].Text == TREENODE_DIRSUB)
            {
                //Dieser Vorgang sollte in einer Try-Catch ausgeführt werden, um eventuelle Fehler zu vermeiden
                try
                {
                    //Ein DirectoryInfo-Objekt muss verwendet werden
                    DirectoryInfo dirinfo = new DirectoryInfo(pfad);

                    //Wenn Directories in dem Ordner existieren, dann sollen diese geladen werden
                    if (dirinfo.GetDirectories().Length > 0)
                    {
                        foreach (DirectoryInfo d in dirinfo.EnumerateDirectories())
                        {
                            //Jetzt werden die einzelnen Ordner hinzugefügt
                            TreeNode n1 = new TreeNode(d.Name);
                            //Nun wird das Icon geladen und dem Node hinzugefügt. Wenn
                            //aber ein Fehler bei der Methode 'GetSmallIcon" passiert,
                            //wird das Standardicon für Ordner geladen
                            try
                            {
                                imglist.Images.Add(FilesystemIcons.GetSmallIcon(d.FullName));
                                n1.ImageIndex         = imglist.Images.Count - 1;
                                n1.SelectedImageIndex = imglist.Images.Count - 1;
                            }
                            catch
                            {
                                n1.ImageIndex         = 0;
                                n1.SelectedImageIndex = 0;
                            }

                            //Edit 05.01: Nun prüfen, ob dieser Ordner weitere Unterordner hat
                            try
                            {
                                DirectoryInfo dtemp = new DirectoryInfo(d.FullName);
                                if (dtemp.GetDirectories().Length > 0)
                                {
                                    n1.Nodes.Add(TREENODE_DIRSUB);
                                }
                            }
                            catch { }

                            tn.Nodes.Add(n1);
                        }

                        //Am Ende muss der Node .dirsub gelöscht werden
                        tn.Nodes.RemoveAt(0);
                    }
                    else
                    {
                        //Wenn der Ordner keine Unterordner hat, dann kann der TreeNode .dirsub sofort gelöscht werden
                        tn.Nodes.RemoveAt(0);
                    }

                    //Nun müssen noch alle Ausnahmen entfernt werden. Es fängt bei den versteckten Ordnern an
                }
                catch (UnauthorizedAccessException)
                {
                    MessageBox.Show("Auf das Verzeichnis " + tn.Text + " kann nicht zugegriffen werden" + Environment.NewLine + Environment.NewLine + "Zugriff verweigert!", "Zugriffsfehler", MessageBoxButtons.OK, MessageBoxIcon.Error);
                }
                catch (Exception ex)
                {
                    MessageBox.Show("Ein Fehler ist beim Laden der Unterordner aufgetreten" + Environment.NewLine + Environment.NewLine + ex.Message, "Fehler", MessageBoxButtons.OK, MessageBoxIcon.Error);
                }
            }
        }
        private void ShowPathContent()
        {
            //ListView leeren
            lvfs.Items.Clear();

            //Wenn der Pfad leer ist, sollen die Drives angezeigt werden. Wenn aber ein Pfad enthalten ist
            //soll der Inhalt des Pfades (Ordner) angezeigt werden
            if (_aktpfad == "")
            {
                smlist.Images.Clear();

                //Nun werden alle Drives geladen und angezeigt
                foreach (DriveInfo drive in DriveInfo.GetDrives())
                {
                    //Icon ermitteln
                    smlist.Images.Add(FilesystemIcons.GetSmallIcon(string.Concat(drive.Name.Substring(0, 2) + @"\")));
                    //Jetzt muss geschaut werden, ob der Drive aktiv ist oder nicht und danach entschieden werden
                    if (drive.IsReady)
                    {
                        ListViewItem lvi = new ListViewItem(string.Concat(drive.Name.Substring(0, 2), " ", DriveFunctions.GetVolumeLabel(Convert.ToChar(drive.Name.Substring(0, 1)))), smlist.Images.Count - 1);
                        lvi.SubItems.Add(""); //Dummy
                        //Der Typ wird anhand des DriveType angegeben. Bei Size kommt der maximale Speicherplatz
                        if (drive.DriveType == DriveType.Fixed)
                        {
                            lvi.SubItems.Add(DriveFunctions.DRIVE_VOLUMELABEL_STD_HDD);
                        }
                        else if (drive.DriveType == DriveType.CDRom)
                        {
                            lvi.SubItems.Add(DriveFunctions.DRIVE_VOLUMELABEL_STD_OPT);
                        }
                        else if (drive.DriveType == DriveType.Removable)
                        {
                            lvi.SubItems.Add(DriveFunctions.DRIVE_VOLUMELABEL_STD_EXT);
                        }
                        else if (drive.DriveType == DriveType.Network)
                        {
                            lvi.SubItems.Add(DriveFunctions.DRIVE_VOLUMELABEL_STD_NET);
                        }
                        else
                        {
                            lvi.SubItems.Add("Unbekannter Laufwerkstyp");
                        }

                        lvi.SubItems.Add(ExtraFunctions.UnitChange(drive.TotalSize));
                        lvfs.Items.Add(lvi);
                    }
                    else
                    {
                        ListViewItem lvi = new ListViewItem(string.Concat(drive.Name.Substring(0, 2), @"\"), smlist.Images.Count - 1);
                        lvi.SubItems.Add(""); //Dummy
                        //Der Typ wird anhand des DriveType angegeben. Bei Size kommt der maximale Speicherplatz
                        if (drive.DriveType == DriveType.Fixed)
                        {
                            lvi.SubItems.Add(DriveFunctions.DRIVE_VOLUMELABEL_STD_HDD);
                        }
                        else if (drive.DriveType == DriveType.CDRom)
                        {
                            lvi.SubItems.Add(DriveFunctions.DRIVE_VOLUMELABEL_STD_OPT);
                        }
                        else if (drive.DriveType == DriveType.Removable)
                        {
                            lvi.SubItems.Add(DriveFunctions.DRIVE_VOLUMELABEL_STD_EXT);
                        }
                        else if (drive.DriveType == DriveType.Network)
                        {
                            lvi.SubItems.Add(DriveFunctions.DRIVE_VOLUMELABEL_STD_NET);
                        }
                        else
                        {
                            lvi.SubItems.Add("Unbekannter Laufwerkstyp");
                        }
                        lvfs.Items.Add(lvi);
                    }
                }
            }
            else
            {
                DirectoryInfo dirinfo = new DirectoryInfo(_aktpfad);
                smlist.Images.Clear();
                smlist.Images.Add(FilesystemIcons.ICON_FILE_16x);

                //Zuerst kommen die Directories
                foreach (DirectoryInfo d in dirinfo.GetDirectories())
                {
                    try
                    {
                        smlist.Images.Add(FilesystemIcons.GetSmallIcon(d.FullName));
                    }
                    catch                                                      //Wenn das Icon über GetSmallIcon nicht genommen wird
                    {
                        smlist.Images.Add(FilesystemIcons.ICON_DIRECTORY_16x); //Ersatzicon
                    }
                    ListViewItem lvi = new ListViewItem(d.Name, smlist.Images.Count - 1);
                    lvi.SubItems.Add(d.LastWriteTime.ToString());
                    lvi.SubItems.Add(Extra.StringResource.GetStringResourceFromFile("@shell32.dll,-10152").ToString());
                    lvfs.Items.Add(lvi);
                }

                //Jetzt kommen die Files. Hier kann man denselben Code wie in ExplorerPlusFileView verwenden
                //Nun wird die Liste gefüllt
                foreach (FileInfo file in dirinfo.GetFiles())
                {
                    //Anhand der Erweiterung schauen, ob es eine Verknüpfung ist oder nicht
                    try
                    {
                        try
                        {
                            if (file.Extension == ".lnk")
                            {
                                smlist.Images.Add(FilesystemIcons.GetSmallIcon(FileFunctions.GetShortcutPath(file.FullName)));
                            }
                            else
                            {
                                smlist.Images.Add(FilesystemIcons.GetSmallIcon(file.FullName));
                            }
                        }
                        catch
                        {
                            smlist.Images.Add(FilesystemIcons.GetIconByExtension_x16(file.Extension));
                        }
                        ListViewItem lvi = new ListViewItem(file.Name, smlist.Images.Count - 1);
                        lvi.SubItems.Add(file.LastWriteTime.ToString());
                        lvi.SubItems.Add(FileFunctions.GetFileTypeDescription(file.Extension));

                        //Wenn die dateigröße unter 1024 Bytes ist, soll stattdessen 1 KB ausgegeben werden
                        if (file.Length < 1024)
                        {
                            lvi.SubItems.Add("1 KB");
                        }
                        else
                        {
                            lvi.SubItems.Add(ExtraFunctions.GetFileSizeKB(Convert.ToDouble(file.Length)));
                        }
                        lvfs.Items.Add(lvi);
                    }
                    catch (UnauthorizedAccessException)
                    { //Geht nicht, da kein Zugriff
                    }
                    catch
                    {
                        ListViewItem lvi = new ListViewItem(file.Name, 0);
                        lvi.SubItems.Add(file.LastWriteTime.ToString());
                        lvi.SubItems.Add(FileFunctions.GetFileTypeDescription(file.Extension));

                        //Wenn die dateigröße unter 1024 Bytes ist, soll stattdessen 1 KB ausgegeben werden
                        if (file.Length < 1024)
                        {
                            lvi.SubItems.Add("1 KB");
                        }
                        else
                        {
                            lvi.SubItems.Add(ExtraFunctions.GetFileSizeKB(Convert.ToDouble(file.Length)));
                        }
                        lvfs.Items.Add(lvi);
                    }
                }
            }
            cbrecentpaths.Text = _aktpfad;
        }
        private void LoadLastData()
        {
            //Maximale Bytezahl berechnen
            long gesbyte = 0;

            for (int i = 0; i < dt.Rows.Count; i++)
            {
                gesbyte += Convert.ToInt64(dt.Rows[i].ItemArray[3].ToString());
            }

            //Einträge in der DataTable nach Size sortieren
            DataView v = dt.DefaultView;

            v.Sort = "Size DESC";

            //ListView füllen
            ImageList img = new ImageList();

            img.ColorDepth          = ColorDepth.Depth32Bit;
            img.ImageSize           = new Size(16, 16);
            lvinhalt.SmallImageList = img;
            for (int i = 0; i < dt.Rows.Count; i++)
            {
                long         size = Convert.ToInt64(v[i].Row.ItemArray[3].ToString());
                ListViewItem lvi  = new ListViewItem(v[i].Row.ItemArray[0].ToString());
                lvi.SubItems.Add(v[i].Row.ItemArray[2].ToString());
                lvi.SubItems.Add(ExtraFunctions.GetFileSizeKB(Convert.ToDouble(size)));

                //Grafik einblenden
                if (v[i].Row.ItemArray[1].ToString() == "Folder")
                {
                    img.Images.Add(FilesystemIcons.GetSmallIcon(DirectoryFunctions.CorrectPath(dirpath)));
                }
                else
                {
                    FileInfo f = new FileInfo(DirectoryFunctions.CorrectPath(dirpath) + v[i].Row.ItemArray[0].ToString());
                    try
                    {
                        if (f.Extension == ".lnk")
                        {
                            img.Images.Add(FilesystemIcons.GetSmallIcon(FileFunctions.GetShortcutPath(f.FullName)));
                        }
                        else
                        {
                            img.Images.Add(FilesystemIcons.GetSmallIcon(f.FullName));
                        }
                    }
                    catch
                    {
                        img.Images.Add(FilesystemIcons.GetIconByExtension_x16(f.Extension));
                    }
                }
                lvi.ImageIndex = img.Images.Count - 1;
                lvi.SubItems.Add(Math.Round(Convert.ToDouble(size * 100 / gesbyte), 2).ToString() + "%");

                lvinhalt.Items.Add(lvi);
            }

            lbsize.Text = ExtraFunctions.UnitChange(Convert.ToDouble(gesbyte));
            tabPage2.Controls.RemoveAt(0);
        }
        /// <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);
                }
            }
        }
        private void ShowPathContent()
        {
            //ListView leeren
            lvfiles.Items.Clear();

            //ImageListen vorbereiten. Es werden jeweils 2 erstellt, einmal für die SmallIcons und
            //einmal für die LargeIcons
            ImageList sil = new ImageList();
            ImageList lil = new ImageList();

            sil.ColorDepth = ColorDepth.Depth32Bit;
            sil.ImageSize  = new Size(16, 16);
            lil.ColorDepth = ColorDepth.Depth32Bit;
            lil.ImageSize  = new Size(48, 48);
            sil.Images.Add(FilesystemIcons.ICON_FILE_16x);
            lil.Images.Add(FilesystemIcons.ICON_FILE_32x);
            lvfiles.SmallImageList = sil;
            lvfiles.LargeImageList = lil;

            //Wenn der Pfad leer ist, sollen die Drives angezeigt werden. Wenn aber ein Pfad enthalten ist
            //soll der Inhalt des Pfades (Ordner) angezeigt werden
            if (_selectedpath == "")
            {
                //View hier

                //Nun werden alle Drives geladen und angezeigt
                foreach (DriveInfo drive in DriveInfo.GetDrives())
                {
                    //Icon ermitteln
                    sil.Images.Add(FilesystemIcons.GetSmallIcon(string.Concat(drive.Name.Substring(0, 2) + @"\")));
                    lil.Images.Add(FilesystemIcons.GetLargeIcon(string.Concat(drive.Name.Substring(0, 2) + @"\")));
                    //Jetzt muss geschaut werden, ob der Drive aktiv ist oder nicht und danach entschieden werden
                    if (drive.IsReady)
                    {
                        ListViewItem lvi = new ListViewItem(string.Concat(drive.Name.Substring(0, 2), " ", DriveFunctions.GetVolumeLabel(Convert.ToChar(drive.Name.Substring(0, 1)))), sil.Images.Count - 1);
                        lvi.SubItems.Add(""); //Dummy
                        //Der Typ wird anhand des DriveType angegeben. Bei Size kommt der maximale Speicherplatz
                        if (drive.DriveType == DriveType.Fixed)
                        {
                            //Wenn es eine SSD ist, soll das auch so angegeben werden
                            if (DriveFunctions.IsSSD(Convert.ToChar(drive.Name.Substring(0, 1))))
                            {
                                lvi.SubItems.Add(DriveFunctions.DRIVE_VOLUMELABEL_STD_SSD_DESC);
                            }
                            else
                            {
                                lvi.SubItems.Add(DriveFunctions.DRIVE_VOLUMELABEL_STD_HDD_DESC);
                            }
                        }
                        else if (drive.DriveType == DriveType.CDRom)
                        {
                            lvi.SubItems.Add(DriveFunctions.DRIVE_VOLUMELABEL_STD_OPT);
                        }
                        else if (drive.DriveType == DriveType.Removable)
                        {
                            lvi.SubItems.Add(DriveFunctions.DRIVE_VOLUMELABEL_STD_EXT);
                        }
                        else if (drive.DriveType == DriveType.Network)
                        {
                            lvi.SubItems.Add(DriveFunctions.DRIVE_VOLUMELABEL_STD_NET);
                        }
                        else
                        {
                            lvi.SubItems.Add("Unbekannter Laufwerkstyp");
                        }

                        lvi.SubItems.Add(ExtraFunctions.UnitChange(drive.TotalSize));


                        lvi.SubItems.Add(getView(drive.Name).ToString());
                        lvfiles.Items.Add(lvi);
                    }
                    else
                    {
                        ListViewItem lvi = new ListViewItem(string.Concat(drive.Name.Substring(0, 2), @"\"), sil.Images.Count - 1);
                        lvi.SubItems.Add(""); //Dummy
                        //Der Typ wird anhand des DriveType angegeben. Bei Size kommt der maximale Speicherplatz
                        if (drive.DriveType == DriveType.Fixed)
                        {
                            lvi.SubItems.Add(DriveFunctions.DRIVE_VOLUMELABEL_STD_HDD);
                        }
                        else if (drive.DriveType == DriveType.CDRom)
                        {
                            lvi.SubItems.Add(DriveFunctions.DRIVE_VOLUMELABEL_STD_OPT);
                        }
                        else if (drive.DriveType == DriveType.Removable)
                        {
                            lvi.SubItems.Add(DriveFunctions.DRIVE_VOLUMELABEL_STD_EXT);
                        }
                        else if (drive.DriveType == DriveType.Network)
                        {
                            lvi.SubItems.Add(DriveFunctions.DRIVE_VOLUMELABEL_STD_NET);
                        }
                        else
                        {
                            lvi.SubItems.Add("Unbekannter Laufwerkstyp");
                        }
                        lvi.SubItems.Add(getView(drive.Name).ToString());
                        lvfiles.Items.Add(lvi);
                    }
                }
            }
            else
            {
                //hier implemintiere mich meine code


                DirectoryInfo dirinfo = new DirectoryInfo(_selectedpath);

                if (_selectedpath == @"C:\" || _selectedpath == @"D:\")
                {
                    setView(_selectedpath);
                }
                else if (_selectedpath.EndsWith(@"\"))
                {
                    setView(_selectedpath.Substring(0, _selectedpath.Length - 1));
                }
                else
                {
                    setView(_selectedpath);
                }
                //Zuerst kommen die Directories
                foreach (DirectoryInfo d in dirinfo.GetDirectories())
                {
                    try
                    {
                        sil.Images.Add(FilesystemIcons.GetSmallIcon(d.FullName));
                        lil.Images.Add(FilesystemIcons.GetLargeIcon(d.FullName));
                    }
                    catch                                                   //Wenn das Icon über GetSmallIcon nicht genommen wird
                    {
                        sil.Images.Add(FilesystemIcons.ICON_DIRECTORY_16x); //Ersatzicon
                        lil.Images.Add(FilesystemIcons.ICON_DIRECTORY_32x); //Ersatzicon
                    }
                    ListViewItem lvi = new ListViewItem(d.Name, sil.Images.Count - 1);
                    lvi.SubItems.Add(d.LastWriteTime.ToString());
                    lvi.SubItems.Add(Extra.StringResource.GetStringResourceFromFile("@shell32.dll,-10152").ToString());
                    lvi.SubItems.Add("");
                    lvi.SubItems.Add(getView(d.FullName).ToString());
                    lvfiles.Items.Add(lvi);
                }

                //Jetzt kommen die Files. Hier kann man denselben Code wie in ExplorerPlusFileView verwenden
                //Nun wird die Liste gefüllt
                foreach (FileInfo file in dirinfo.GetFiles())
                {
                    //Anhand der Erweiterung schauen, ob es eine Verknüpfung ist oder nicht
                    try
                    {
                        try
                        {
                            if (file.Extension == ".lnk")
                            {
                                sil.Images.Add(FilesystemIcons.GetSmallIcon(FileFunctions.GetShortcutPath(file.FullName)));
                                lil.Images.Add(FilesystemIcons.GetLargeIcon(FileFunctions.GetShortcutPath(file.FullName)));
                            }
                            else
                            {
                                sil.Images.Add(FilesystemIcons.GetSmallIcon(file.FullName));
                                lil.Images.Add(FilesystemIcons.GetLargeIcon(file.FullName));
                            }
                        }
                        catch
                        {
                            sil.Images.Add(FilesystemIcons.GetIconByExtension_x16(file.Extension));
                            lil.Images.Add(FilesystemIcons.GetIconByExtension_x32(file.Extension));
                        }
                        ListViewItem lvi = new ListViewItem(file.Name, sil.Images.Count - 1);
                        lvi.SubItems.Add(file.LastWriteTime.ToString());
                        lvi.SubItems.Add(FileFunctions.GetFileTypeDescription(file.Extension));

                        //Wenn die dateigröße unter 1024 Bytes ist, soll stattdessen 1 KB ausgegeben werden
                        if (file.Length < 1024)
                        {
                            lvi.SubItems.Add("1 KB");
                        }
                        else
                        {
                            lvi.SubItems.Add(ExtraFunctions.GetFileSizeKB(Convert.ToDouble(file.Length)));
                        }

                        lvi.SubItems.Add(getView(file.FullName).ToString());
                        lvfiles.Items.Add(lvi);
                    }
                    catch (UnauthorizedAccessException)
                    { //Geht nicht, da kein Zugriff
                    }
                    catch
                    {
                        ListViewItem lvi = new ListViewItem(file.Name, 0);
                        lvi.SubItems.Add(file.LastWriteTime.ToString());
                        lvi.SubItems.Add(FileFunctions.GetFileTypeDescription(file.Extension));

                        //Wenn die dateigröße unter 1024 Bytes ist, soll stattdessen 1 KB ausgegeben werden
                        if (file.Length < 1024)
                        {
                            lvi.SubItems.Add("1 KB");
                        }
                        else
                        {
                            lvi.SubItems.Add(ExtraFunctions.GetFileSizeKB(Convert.ToDouble(file.Length)));
                        }
                        lvi.SubItems.Add(getView(file.FullName).ToString());
                        lvfiles.Items.Add(lvi);
                    }
                }
            }

            LoadedPath?.Invoke(_selectedpath);
        }