Возможно, это не идеальное решение, но я все равно предложу следующее:
// 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 не повезло). Тем не менее, я бы посчитал, что это достаточно хорошее чисто управляемое решение, несмотря на использование справочной таблицы, и имеет преимущество надежной работы на всех ОС.
Надеюсь, это поможет.