ListView (С# WinForms). Переход по каталогам. Реализация подобия проводника

Есть такая задача:

Создать приложение аналог Проводника. В приложении, в отличии от проводника, есть только ListView. При старте отображается содержимое диска С: Есть возможность: открывать файлы, переходить в подпапки (при двойном клике). Реализовать разные способы отображения ListView. Файлы и папки должны иметь разные иконки.

Часть сделал, папки и файлы диска С отображаются, но дальше уперся в то, что не знаю, как реализовать переход по каталогам дальше. Пробовал по разному, и объект пересоздавать и сохранять отдельно полное имя каталога...не выходит, зачастую выдает исключение, что не правильный указан путь, или вообще не работает. Пробовал читать и про DirectoryInfo и про FileSystemInfo и мало что понял...Буду благодарен, если подскажите, как реализовать переход...

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.IO;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;

namespace Lesson6_ListView_HomeWork_Koval
{
   public partial class Form1 : Form
   {
      
       DirectoryInfo di = new DirectoryInfo(@"c:\");
       bool flag = true;
       public Form1()
       {
           InitializeComponent();
           listView1.MouseWheel += ListView1_MouseWheel;
           listView1.LargeImageList = new ImageList();
           listView1.SmallImageList = new ImageList();
           listView1.LargeImageList.Images.Add("folder", Image.FromFile(@"Image\Papka.jfif"));
           listView1.LargeImageList.Images.Add("file", Image.FromFile(@"Image\File.jfif"));
           listView1.LargeImageList.ImageSize = new Size(64, 64);
           listView1.SmallImageList.Images.Add("folder", Image.FromFile(@"Image\Papka.jfif"));
           listView1.SmallImageList.Images.Add("file", Image.FromFile(@"Image\File.jfif"));
           listView1.SmallImageList.ImageSize = new Size(32, 32);
           
         
           View[] views = Enum.GetValues(typeof(View)) as View[];
           foreach (View view in views)
           {
               var menuItem = ViewToolStripMenuItem.DropDownItems.Add($"{view}");
               menuItem.Click += MenuItem_Click;
           }
           listView1.FullRowSelect = true;
           listView1.GridLines = true;
           listView1.Columns.Add("Имя");
           listView1.Columns.Add("Тип");
           listView1.Columns.Add("Дата создания");
           foreach (FileSystemInfo fsi in di.GetFileSystemInfos())
           {
               if (Directory.Exists(fsi.FullName))
               {
                   var item = listView1.Items.Add(fsi.Name, "folder");
                   item.SubItems.Add("[DIR]");
                   item.SubItems.Add(fsi.CreationTime.ToString());
               }
               else
               {
                   var item = listView1.Items.Add(fsi.Name, "file");
                   item.SubItems.Add(fsi.Extension);
                   item.SubItems.Add(fsi.CreationTime.ToString());
               }

           }

           ViewToolStripMenuItem.Click += ToolStripMenuItem3_Click;

           listView1.FullRowSelect = true; // выделение строки в детализированном виде

           listView1.ItemSelectionChanged += ListView1_ItemSelectionChanged; // событие выбора элемента

           listView1.GridLines = true; // отображение сетки
       }
       private void ListView1_MouseWheel(object sender, MouseEventArgs e)
       {
           var oldSize = listView1.LargeImageList.ImageSize;
           listView1.LargeImageList.ImageSize = new Size(oldSize.Width + 8, oldSize.Height + 8);
       }
       private void ListView1_ItemSelectionChanged(object sender, ListViewItemSelectionChangedEventArgs e)
       {
          
           if (e.IsSelected)
           {
            
               
                   listView1.Items.Clear();
                   toolStripLabel1.Text = e.Item.Text;
                   View[] views = Enum.GetValues(typeof(View)) as View[];
                   foreach (View view in views)
                   {
                       var menuItem = ViewToolStripMenuItem.DropDownItems.Add($"{view}");
                       menuItem.Click += MenuItem_Click;
                   }

             
                   foreach (FileSystemInfo fsi in di.GetFileSystemInfos())
                   {
                       if (Directory.Exists(fsi.FullName))
                       {
                      // MessageBox.Show(fsi.FullName);
                           var item = listView1.Items.Add(fsi.Name, "folder");
                           item.SubItems.Add("[DIR]");
                           item.SubItems.Add(fsi.CreationTime.ToString());
                       }
                       else
                       {
                      // MessageBox.Show(fsi.FullName);
                       var item = listView1.Items.Add(fsi.Name, "file");
                           item.SubItems.Add(fsi.Extension);
                           item.SubItems.Add(fsi.CreationTime.ToString());
                       }
                   }
           }
       }
       private void MenuItem_Click(object sender, EventArgs e)
       {
           ToolStripItem item = sender as ToolStripItem;
           listView1.View = (View)Enum.Parse(typeof(View), item.Text); ;
       }
       private void ToolStripMenuItem3_Click(object sender, EventArgs e)
       {
           listView1.View = View.Details;
       }
       private void ViewToolStripMenuItem_Click(object sender, EventArgs e)
       {

       }
   }
}

Ответы (0 шт):