2012-07-05 54 views
5

是否有办法检测单个文件的文件系统大小限制(例如胖32上的4GB)?如何检测单个文件的文件系统大小限制

它必须在Windows操作系统上工作,但更好的是一个便携式解决方案。检测文件系统类型可能是一个解决方法,但我不知道你怎么做。

有人可以帮我吗?

预先感谢您 托比亚斯

+0

当然,我能想到的查询在Windows文件系统的名*的非便携的方式,但我不认为正确的满足您的要求... – reuben

+0

现在可能会解决我的问题 - 但这会让我产生一种对这个问题有“丑陋”解决方案的不安感觉。如果没有别的办法,那也是无法帮助的。 –

+1

...但至少为你寻找更好,更清洁的选择而感到自豪。许多开发人员不会这样做... – reuben

回答

3

您可以检测文件系统类型,在Windows上GetVolumeInformation

+1

...或通过WMI,如果需要的话。尽管(例如NTFS,FAT,FAT32,EXFAT,CDFS,UDF等)您需要对通常支持的文件系统的知识进行硬编码。 – reuben

+0

@ruben:是的,但看过http://msdn.microsoft.com/en-us/library/windows/desktop/aa364407%28v=vs.85%29.aspx后,我真的没有看到更好的方法。也许IFS工具包知道更多的IOCTL代码,虽然可能有帮助... – Anders

0

您可以通过boost::space()得到容量限制,或者直接使用POSIX fstatvs()

至于对个别文件大小的限制......想到的唯一便携式答案是丑陋的蛮力尝试创建大和更大的文件直到失败,因为它是昂贵的(如果容量已经有限,则不可能)。

+1

这可能会提供可用空间的数量,但不一定是文件系统的任何固有实施限制... – reuben

+0

相当。不过,我有点困惑,因为固有的地址限制可能会引起兴趣,而不是容量。 –

+0

考虑具有超过4 GB可用空间的文件系统,但仍不允许创建大于4 GB的文件。在尝试创建任何这样的文件之前,这可能对预先了解这一点很重要... – reuben