Пример кода, демонстрирующий возможности работы с файловой системой на 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;
}
}
}
}

