2

特定のドライブ/フォルダ/ディレクトリの最大許容ファイルサイズを(ネイティブに)取得する方法を知っている人はいますか?Fat16の場合は約2GB、Fat32の場合は4GBでした。新しいNTFSバージョンの場合は、それをはるかに超えています。Monoや基盤となるOSは言うまでもありません。

そのヒントを教えてくれるかもしれない、読み上げ/取得できるものはありますか?基本的に、私は知っているアプリが2GBよりも大きい単一のファイルを生成する可能性があり、ユーザーが対応する出力パスを設定するときにそれを確認したいと思います。

乾杯&ありがとう、-J

4

2 に答える 2

1

System.Info.DriveInfo.DriveFormatを使用してドライブのファイルシステム(NTFS、FATなど)を取得するのはどうですか?これにより、サポートされているファイルサイズについて少なくともある程度の知識が得られるはずです。

于 2009-03-21T00:11:40.440 に答える
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

ウィキペディアのこのページには、さまざまなファイルシステムの最大ファイルサイズのかなり包括的なリストが含まれています。関数でチェックインするファイルシステムの数によってはGetMaximumFileSize、switchステートメントではなく、Dictionaryオブジェクトまたは単純なデータファイルを使用することもできます。

これで、WMIまたはWindows APIを使用して最大ファイルサイズを直接取得できる場合がありますが、これらのソリューションはもちろんWindowsとのみ互換性があります(つまり、Mono / Linuxでは運がありません)。ただし、ルックアップテーブルを使用しているにもかかわらず、これはかなり優れた純粋に管理されたソリューションであり、すべてのOSで確実に動作するという利点があります。

お役に立てば幸いです。

于 2009-03-21T00:17:53.810 に答える