Как получить максимально допустимый размер файла в .Net? - PullRequest
2 голосов
/ 21 марта 2009

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

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

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

Ответы [ 2 ]

1 голос
/ 21 марта 2009

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

// 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 или даже простой файл данных, а не оператор switch.

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

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

1 голос
/ 21 марта 2009

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

...