これは理想的な解決策ではないかもしれませんが、とにかく次のことをお勧めします。
// 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
、switchステートメントではなく、Dictionaryオブジェクトまたは単純なデータファイルを使用することもできます。
これで、WMIまたはWindows APIを使用して最大ファイルサイズを直接取得できる場合がありますが、これらのソリューションはもちろんWindowsとのみ互換性があります(つまり、Mono / Linuxでは運がありません)。ただし、ルックアップテーブルを使用しているにもかかわらず、これはかなり優れた純粋に管理されたソリューションであり、すべてのOSで確実に動作するという利点があります。
お役に立てば幸いです。