C# → Работа с файловой системой

Пример кода, демонстрирующий возможности работы с файловой системой на C#.

файловой системой 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;
            }
        }
    }
}

Related: angell town brixton stabbing, kenny campbell troy, al net worth, diferencia entre escalope y milanesa, heather hewitt abc age, watsonville police scanner frequency, sheryl shoemaker griffin, what do oranges symbolize in the godfather, peter calls stiles pup fanfiction, brown funeral home madill, ok, capital grille watermelon salad recipe, is country singer buck white still alive, antioch tn police activity today, usa children’s and women’s hospital cafeteria menu, washington state 2023 legislative session dates, raymond froggatt net worth,