Не показывает информацию о диске C

174
02 февраля 2020, 14:30
foreach (var drive in DriveInfo.GetDrives())
{
    string DiskName = string.Format("Название диска - {0}", drive.Name);
    string DiskType = string.Format("Тип диска - {0}", drive.DriveType);
    if (drive.IsReady) // Проверяем готов ли диск
    {
        string DiskM = string.Format("Метка диска - {0}", drive.VolumeLabel);
        string TypeFSystem = string.Format("Тип файловой системы - {0}", drive.DriveFormat);
        string DiskClearMb = string.Format("Общее доступное место - {0} мб", GetSizeInMegabytes(drive.TotalSize));
        string DiskAllClearMb = string.Format("Всё свободное место - {0} мб", GetSizeInMegabytes(drive.TotalFreeSpace)); GetSizeInMegabytes(drive.AvailableFreeSpace);
        try
        {
            using (StreamWriter myWriter = new StreamWriter(path))
            {
                myWriter.WriteLine(DiskName + "\n" + DiskType + "\n" + DiskM + "\n" + TypeFSystem + "\n" + DiskClearMb + "\n" + DiskAllClearMb + "\n");
            }
        }
        catch
        {
            Console.WriteLine("Error");
        }
    }
}

long GetSizeInMegabytes(long bytes)
{
    return bytes / 1024 / 1024;
}

Должен показывать инфу о всех дисках, а показывает только о диске D. Почему?

Answer 1

Вот эта строка: new StreamWriter(path) - каждый раз создает новый файл, затирая предыдущее содержимое. В итоге в файле оказывается информация о самом последнем диске.

Я бы переписал код следующим образом:

using (var writer = new StreamWriter(path))
{
    foreach (var drive in DriveInfo.GetDrives())
    {
        if (drive.IsReady)
        {
            writer.WriteLine("Название диска - {0}", drive.Name);
            writer.WriteLine("Тип диска - {0}", drive.DriveType);
            writer.WriteLine("Метка диска - {0}", drive.VolumeLabel);
            writer.WriteLine("Тип файловой системы - {0}", drive.DriveFormat);
            writer.WriteLine("Общее доступное место - {0} мб", GetSizeInMegabytes(drive.TotalSize));
            writer.WriteLine("Всё свободное место - {0} мб", GetSizeInMegabytes(drive.TotalFreeSpace));
            writer.WriteLine();
        }
    }
}

Пишем сразу в поток. Метод WriteLine имеет перегрузку, принимающую строку формата.

Промежуточные переменные не нужны. Хотя можно их оставить - иногда они улучшают читаемость и упрощают понимание кода.

Обработка исключений - по вкусу.

READ ALSO
Как получить список файлов из папки на c#?

Как получить список файлов из папки на c#?

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

190
FormatException для DataGridViewComboCell

FormatException для DataGridViewComboCell

Я использую вот такой метод погрузки данных в comboBox

192
Не могу понять почему через некоторое время не работает контекстное меню

Не могу понять почему через некоторое время не работает контекстное меню

Написал приложение, которое мониторит папку, если файл есть, то копирует его в другую папку, но с нужным именемЭто в кратце

182