2009-03-20 3 views
2

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

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

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

ответ

1

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

// 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 

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

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

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

1

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

Смежные вопросы