Обнаружение общего и свободного пространства на диске в.NET

Я использую elmah. Это имеет некоторые действительно хорошие функции и здесь статья CodeProject о нем. Я думаю, что команда StackOverflow использует elmah также!

15
задан CesarGon 3 October 2019 в 17:21
поделиться

5 ответов

Как насчет этой ссылки из MSDN , которая использует класс System.IO.DriveInfo ?

12
ответ дан 1 December 2019 в 02:02
поделиться

System.IO.DriveInfo работает нормально. Я подключен к двум отдельным серверам Netware с несколькими подключенными дисками.

Вот для локального диска C::

Drive C:\
  File type: Fixed
  Volume label: Drive C
  File system: NTFS
  Available space to current user:   158558248960 bytes
  Total available space:             158558248960 bytes
  Total size of drive:               249884004352 bytes 

Вот результат для одного из сетевых дисков:

Drive F:\
  File type: Network
  Volume label: SYS
  File system: NWFS
  Available space to current user:     1840656384 bytes
  Total available space:               1840656384 bytes
  Total size of drive:                 4124475392 bytes 

Я использовал следующий код непосредственно из документации MSDN на DriveInfo:

using System;
using System.IO;

class Test
{
    public static void Main()
    {
        DriveInfo[] allDrives = DriveInfo.GetDrives();

        foreach (DriveInfo d in allDrives)
        {
            Console.WriteLine("Drive {0}", d.Name);
            Console.WriteLine("  File type: {0}", d.DriveType);
            if (d.IsReady == true)
            {
                Console.WriteLine("  Volume label: {0}", d.VolumeLabel);
                Console.WriteLine("  File system: {0}", d.DriveFormat);
                Console.WriteLine(
                    "  Available space to current user:{0, 15} bytes", 
                    d.AvailableFreeSpace);

                Console.WriteLine(
                    "  Total available space:          {0, 15} bytes",
                    d.TotalFreeSpace);

                Console.WriteLine(
                    "  Total size of drive:            {0, 15} bytes ",
                    d.TotalSize);
            }
        }
    }
}
1
ответ дан 1 December 2019 в 02:02
поделиться

Это может не то, что вам нужно, но я пытаюсь помочь, и у него есть бонус в виде слегка безопасного стирания свободного места на вашем диске.

public static string DriveSizeAvailable(string path)
{
    long count = 0;
    byte toWrite = 1;
    try
    {
        using (StreamWriter writer = new StreamWriter(path))
        {
            while (true)
            {
                writer.Write(toWrite);
                count++;
            }
        }
    }
    catch (IOException)
    {                
    }

    return string.Format("There used to be {0} bytes available on drive {1}.", count, path);
}

public static string DriveSizeTotal(string path)
{
    DeleteAllFiles(path);
    int sizeAvailable = GetAvailableSize(path);
    return string.Format("Drive {0} will hold a total of {1} bytes.", path, sizeAvailable);
}
3
ответ дан 1 December 2019 в 02:02
поделиться

Я почти уверен, что это невозможно. В проводнике Windows, если я попытаюсь получить свойства папки каталога UNC, это ничего не даст мне, насколько доступно доступное пространство. Используемое / доступное пространство - это характеристика дисков, а не папок, а общие ресурсы UNC рассматриваются как просто папки.

вам необходимо либо:
- Подключить диск
- Запустите что-нибудь на удаленном компьютере, чтобы проверить дисковое пространство.

Вы также можете столкнуться с проблемами с чем-то вроде распределенной файловой системы, в которой общий ресурс UNC / Mapped НЕ привязан к какому-либо конкретному диску, поэтому вам придется фактически суммировать до нескольких дисков.

А как насчет пользовательских квот? Диск может быть неполным, но учетная запись, которую вы используете для записи в эту папку, возможно, достигла своего предела.

0
ответ дан 1 December 2019 в 02:02
поделиться

Вы можете использовать. GetDiskFreeSpaceEx из kernel32.dll, которая работает с UNC-путями и дисками. Все, что вам нужно сделать, это включить DllImport (пример см. по ссылке).

11
ответ дан 1 December 2019 в 02:02
поделиться
Другие вопросы по тегам:

Похожие вопросы: