Справочник по C#

    Исходники по языку программирования CSharp

    Получение размера директории: Справочник по C#

    /
    /
    /
    1225 Views


          Неудобство стандартного файлового менеджера операционной системы Windows заключается в дефиците необходимой информации при просмотре содержимого папок и файлов. Видеть размер папки часто необходимо непосредственно в окне Проводника, особенно когда Windows очень часто напоминает о необходимости освободить место на диске. Конечно же, всегда можно воспользоваться окном свойств объекта, но этот метод чрезвычайно трудоемкий, особенно когда необходимо определить размеры нескольких папок.
          Для получения размера директории со всеми вложениями, в данном примере будет использоваться «Рекурсия». В C# допускается, чтобы метод вызывал самого себя. Этот процесс называется рекурсией, а метод, вызывающий самого себя, — рекурсивным. В данном случае вызывается основной метод «GetTotalSize» с передачей в качестве параметров, начальной директории размер которой необходимо получить и индекс выбранного элемента из списка единиц измерений. Метод получает список всех файлов в директории и с помощью метода «GetFileSize» суммирует размер всех файлов в переменную «totalSize». Для сканирования вложенных директорий вызывается метод «GetDirectories», возвращающий массив имен подкаталогов, с последующим вызовом метода «GetTotalSize», для каждого найденного каталога. Из этого следует, что метод «GetTotalSize» является рекурсивным, т.к. вызывает сам себя.
          Вообще, рекурсия представляет собой процесс, в ходе которого нечто определяет само себя. В этом отношении она чем-то напоминает циклическое определение. Рекурсивный метод отличается главным образом тем, что он содержит оператор, в котором этот метод вызывает самого себя. Рекурсия является эффективным механизмом управления программой. Главное преимущество рекурсии заключается в том, что она позволяет реализовать некоторые алгоритмы яснее и проще, чем итерационным способом.
          Создайте проект «Windows Form» в «Microsoft Visual Studio» и добавьте на главную форму вашего проекта следующие элементы управления:

    • System.Windows.Forms.TextBox textBox1 – элемент управления для вывода пути к выбранной директории;
    • System.Windows.Forms.Button button1 – кнопка запуска процесса получения общего размера выбранной директории;
    • System.Windows.Forms.ComboBox comboBox1 – элемент управления для предоставления выбора единиц измерения в которой будет выдан результат (Кб.;Мб.;Гб.).

    У вас получится приведенный пример.

          Сделайте двойной клик левой клавишей мыши по любому свободному месту главной формы, вы перейдете в редактор кода с установкой курсора в автоматически созданном методе «Form1_Load», события «Load», выполняющегося при загрузке формы. Вставьте в тело данного метода приведенный ниже листинг добавления единиц измерения.

    //Добавляем в элемент управления comboBox1
    //размерность возвращаемых значений.
    comboBox1.Items.Add("Кб.");
    comboBox1.Items.Add("Мб.");
    comboBox1.Items.Add("Гб.");
    //Выбираем первый элемент из списка.
    comboBox1.SelectedIndex = 0;

          Перейдите в конструктор главной формы и сделайте двойной клик левой клавишей мыши по элементу управления «button1». Вы перейдете в редактор кода с автоматической установкой курсора в созданном методе «button1_Click», события «Click», возникающего при нажатии на кнопку. Добавьте в данный метод, приведенный ниже листинг открытия диалогового окна выбора директории размер которой необходимо получить и запуска самого процесса получения информации с выводом результата в сообщении.

    //Создание класса для вывода окна выбора директории.
    FolderBrowserDialog fbd = new FolderBrowserDialog();
    
    //Выводим диалоговое окно для выбора директории.
    // Данный класс возвращает следующие значения:
    // 1) Объект System.Windows.Forms.DialogResult.OK,
    //    если пользователь нажимает кнопку
    //    ОК в диалоговом окне;
    // 2) Объект System.Windows.Forms.DialogResult.Cancel,
    //    если пользователь закрывает диалоговое окно.
    DialogResult result = fbd.ShowDialog();
    
    //Если пользователь выбрал директорию
    //и нажал ОК, то запускаем процесс получения
    //размера выбранной директории.
    if (result == DialogResult.OK)
    {
    //Вывод пути к выбранной директории.
    textBox1.Text = fbd.SelectedPath;
    
    //Вызов метода получения размера директории с
    //передачей в качестве параметра, пути к ней.
    MessageBox.Show("Текущий размер директории " +
    GetTotalSize(fbd.SelectedPath, comboBox1.SelectedIndex),
    "Получение размера директории",
    MessageBoxButtons.OK,
    MessageBoxIcon.Information);
    }

    Так же добавьте сами методы получения общего размера выбранной директории.

    //Переменная содержащая общий размер директории.
    private double totalSize = 0;
    
    public string GetTotalSize(string directory, int type)
    {
    //Получаем список файлов в текущей директории.
    string[] files = System.IO.Directory.GetFiles(directory);
    
    //Инициализируем новую переменную
    //общего размера директории.
    string folderSize = string.Empty;
    
    //Проходимся по всем найденным файлам.
    foreach (string file in files)
    {
    //Складываем размер файлов текущей
    //директории.
    GetFileSize(file);
    }
    
    //Вызываем метод GetDirectories с передачей в качестве параметра, пути к
    //текущей директории. Данный метод возвращает
    //массив имен подкаталогов.
    string[] subDirs = System.IO.Directory.GetDirectories(directory);
    //Проходимся по всем полученным подкаталогам.
    foreach (string dir in subDirs)
    {
    //Вызов метода получения размера
    //текущего подкаталога.
    GetTotalSize(dir,type);
    }
    
    switch (type)
    {
    case 0:
    //Возвращение полученного размера директории в
    //килобайтах.
    folderSize = (totalSize / Math.Pow(1024, 1)).ToString() + " Кб.";
    break;
    case 1:
    //Возвращение полученного размера директории в
    //мегабайтах.
    folderSize = (totalSize / Math.Pow(1024, 2)).ToString() + " Мб.";
    break;
    case 2:
    //Возвращение полученного размера директории в
    //гигабайтах.
    folderSize = (totalSize / Math.Pow(1024, 3)).ToString() + " Гб.";
    break;
    default:
    //Возвращение полученного размера директории в
    //гигабайтах.
    folderSize = (totalSize / Math.Pow(1024, 1)).ToString() + " Гб.";
    break;
    }
    
    return folderSize;
    }
    
    private void GetFileSize(string path)
    {
    //Берем текущий файл в текущей директории.
    System.IO.FileInfo fi = new System.IO.FileInfo(path);
    //Получаем размер текущего файла в байтах и
    //прибавляем его к общему размеру директории.
    totalSize += fi.Length;
    }

          Запустите проект, нажав на клавишу «F5». После успешной компиляции и запуска вашего проекта у вас откроется главная форма вашего проекта, нажмите кнопку «Открыть» и выберете директорию, размер которой вы хотите получить. После подсчета суммарного размера директории у вас появится сообщение с выводом результата. Ниже представлены примеры вывода результатов в различных единицах измерения.

    Кб.
    Мб.
    Гб.

    Получение размера директории: Справочник по C#

    0.00 (0%) 0 votes

    moyadcode13
    • Facebook
    • Twitter
    • Google+
    • Linkedin
    • Pinterest