Пример кода, демонстрирующий возможности работы с файловой системой на C#.
Пример реализации:
using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Text; using System.Windows.Forms; namespace ListView { public partial class Form1 : Form { // поле для хранения предыдущих папок private System.Collections.Specialized.StringCollection folderCol; public Form1() { InitializeComponent(); // инициализация списка истории папок folderCol = new System.Collections.Specialized.StringCollection(); CreateHeadersAndFillListView(); // создание полей в ListView PaintListView(@"C:"); // заполнение (root = C:) folderCol.Add(@"C:"); // добавление в историю stStrip.Items[1].Text = "Detail"; // добавляем в StatuBar вид lwFilesAndFolders.ItemActivate += new EventHandler(lwFilesAndFolders_ItemActivate); } // при двойном щелчке private void lwFilesAndFolders_ItemActivate(object sender, EventArgs e) { System.Windows.Forms.ListView lw = (System.Windows.Forms.ListView)sender; // Tag содержит полный путь к фалу (папке) string filename = lw.SelectedItems[0].Tag.ToString(); if (lw.SelectedItems[0].ImageIndex != 0) // если файл { try { // попытка запустить файл System.Diagnostics.Process.Start(filename); } catch { } } else { PaintListView(filename); folderCol.Add(filename); } } // создает заголовки и заполняет ListView private void CreateHeadersAndFillListView() { // заголовки ColumnHeader colHead; colHead = new ColumnHeader(); colHead.Text = "Имя файла"; colHead.Width = 150; lwFilesAndFolders.Columns.Add(colHead); colHead = new ColumnHeader(); colHead.Text = "Размер"; lwFilesAndFolders.Columns.Add(colHead); colHead = new ColumnHeader(); colHead.Text = "Последний доступ"; lwFilesAndFolders.Columns.Add(colHead); } // заполняет ListView именами каталогов и файлов private void PaintListView(string root) { try { ListViewItem lvi; // элемент проссматриваегомого списка ListViewItem.ListViewSubItem lvsi; // субэлементы (столбец списка) // если отсутствует корневая папка - ничего не делаем if (root.CompareTo("") == 0) return; // получение инф. о корневой папке System.IO.DirectoryInfo dir = new System.IO.DirectoryInfo(root); // извлечение файлов и папок, находящихся в корневой папке System.IO.DirectoryInfo[] dirs = dir.GetDirectories(); // папки System.IO.FileInfo[] files = dir.GetFiles(); // файлы lwFilesAndFolders.Items.Clear(); // очистка элементов (без заголовков) stStrip.Items[0].Text = root; // маркируем текущий путь // отключаем перерисовку на момент добавления компонентов lwFilesAndFolders.BeginUpdate(); // проход в цикле по всем ПАПКАМ и включение их в список foreach (System.IO.DirectoryInfo di in dirs) { // создание основного элемента ListViewItem lvi = new ListViewItem(); lvi.Text = di.Name; // имя папки lvi.ImageIndex = 0; // индекс иконки (папки) lvi.Tag = di.FullName; // полный путь к папке // создание 2 элементов ListVIewSubItem (для 2 доп.столбцов) lvsi = new ListViewItem.ListViewSubItem(); lvsi.Text = ""; // у папок размер отсутствует lvi.SubItems.Add(lvsi); // включение элемента в ListViewItem lvsi = new ListViewItem.ListViewSubItem(); lvsi.Text = di.LastAccessTime.ToString(); // последний столбец lvi.SubItems.Add(lvsi); // включение элемента в ListViewItem // включение элемента ListViewItems в семейство Items lwFilesAndFolders.Items.Add(lvi); } // проход в цикле по всем ФАЙЛАМ и включение их в список foreach (System.IO.FileInfo fi in files) { // создание основного элемента ListViewItem lvi = new ListViewItem(); lvi.Text = fi.Name; // имя файла lvi.ImageIndex = 1; // индекс иконки (папки) lvi.Tag = fi.FullName; // полный путь к файлу // создание 2 элементов ListVIewSubItem (для 2 доп.столбцов) lvsi = new ListViewItem.ListViewSubItem(); lvsi.Text = fi.Length.ToString(); // у папок размер отсутствует lvi.SubItems.Add(lvsi); // включение элемента в ListViewItem lvsi = new ListViewItem.ListViewSubItem(); lvsi.Text = fi.LastAccessTime.ToString(); // последний столбец lvi.SubItems.Add(lvsi); // включение элемента в ListViewItem // включение элемента ListViewItems в семейство Items lwFilesAndFolders.Items.Add(lvi); } // снятие запрета на прорисовку lwFilesAndFolders.EndUpdate(); } catch (Exception err) { MessageBox.Show("Ошибка:" + err.Message); } } private void button1_Click(object sender, EventArgs e) { if (folderCol.Count > 1) { PaintListView(folderCol[folderCol.Count - 2].ToString()); folderCol.RemoveAt(folderCol.Count - 1); } else { PaintListView(folderCol[0].ToString()); } } private void rbLargeIcon_CheckedChanged(object sender, EventArgs e) { RadioButton rb = (RadioButton)sender; switch (rb.Text) { case "LargeIcon": lwFilesAndFolders.View = View.LargeIcon; stStrip.Items[1].Text = "LargeIcon"; break; case "SmallIcon": lwFilesAndFolders.View = View.SmallIcon; stStrip.Items[1].Text = "SmallIcon"; break; case "List": lwFilesAndFolders.View = View.List; stStrip.Items[1].Text = "List"; break; case "Details": lwFilesAndFolders.View = View.Details; stStrip.Items[1].Text = "Details"; break; default: lwFilesAndFolders.View = View.Details; stStrip.Items[1].Text = "Details"; break; } } } }