Как получить максимально допустимый размер файла в .Net?

StackOverflow https://stackoverflow.com/questions/668380

  •  21-08-2019
  •  | 
  •  

Вопрос

Кто-нибудь знает, как (изначально) получить максимально разрешенный размер файла для данного диска/папки/каталога?Насколько я помню, для Fat16 это ~ 2 ГБ, для Fat32 — 4 ГБ, а для более новых версий NTFS это нечто большее.не говоря уже о Mono и базовых ОС.

Есть ли что-нибудь, что я могу прочитать/получить, что могло бы дать мне подсказку по этому поводу?По сути, я знаю, что приложение может создавать отдельные файлы размером более 2 ГБ, и я хочу проверить это, когда пользователь устанавливает соответствующие пути вывода...

Приветствия и спасибо, -J

Это было полезно?

Решение

Возможно, это не идеальное решение, но я все равно предлагаю следующее:

// Returns the maximum file size in bytes on the filesystem type of the specified drive.
long GetMaximumFileSize(string drive)
{
    var driveInfo = new System.IO.DriveInfo(drive)

    switch(driveInfo.DriveFormat)
    {
        case "FAT16":
            return 1000; // replace with actual limit
        case "FAT32":
            return 1000; // replace with actual limit
        case "NTFS":
            return 1000; // replace with actual limit
    }
}

// Examples:
var maxFileSize1 = GetMaximumFileSize("C"); // for the C drive
var maxFileSize2 = GetMaximumFileSize(absolutePath.Substring(0, 1)); // for whichever drive the given absolute path refers to

Этот Страница в Википедии содержит довольно полный список максимальных размеров файлов для различных файловых систем.В зависимости от количества файловых систем, которые вы хотите проверить, в GetMaximumFileSize функции, вы можете использовать объект Dictionary или даже простой файл данных, а не оператор переключения.

Теперь ваша очередь может можно получить максимальный размер файла напрямую с помощью WMI или, возможно, даже Windows API, но эти решения, конечно, будут совместимы только с Windows (т.не повезло с Mono/Linux).Тем не менее, я бы посчитал это достаточно хорошим чисто управляемым решением, несмотря на использование таблицы поиска, и имеет преимущество надежной работы на всех ОС.

Надеюсь, это поможет.

Другие советы

Как насчет использования System.Info.DriveInfo.DriveFormat для получения файловой системы диска (NTFS, FAT и т. д.)?Это должно дать вам хотя бы некоторое представление о поддерживаемых размерах файлов.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top