在Python中确定文件系统的簇大小

Phi*_*rie 8 python filesystems

我想用Python 计算一个文件的" 磁盘大小 ".因此,我想确定存储文件的文件系统的簇大小.

如何在Python中确定簇大小?或者另一种计算" 磁盘大小 "的内置方法也可以.

我查看了os.path.getsize,但它以字节为单位返回文件大小,而不考虑FS的块大小.

我希望这可以通过独立于操作系统的方式完成......

DNS*_*DNS 6

在 UNIX/Linux 平台上,使用 Python 的内置os.statvfs。在 Windows 上,除非您可以找到执行此操作的第三方库,否则您需要使用 ctypes 来调用 Win32 函数GetDiskFreeSpace,如下所示:

import ctypes

sectorsPerCluster = ctypes.c_ulonglong(0)
bytesPerSector = ctypes.c_ulonglong(0)
rootPathName = ctypes.c_wchar_p(u"C:\\")

ctypes.windll.kernel32.GetDiskFreeSpaceW(rootPathName,
    ctypes.pointer(sectorsPerCluster),
    ctypes.pointer(bytesPerSector),
    None,
    None,
)

print(sectorsPerCluster.value, bytesPerSector.value)
Run Code Online (Sandbox Code Playgroud)

请注意,ctypes 仅在 2.5 或 2.6 中成为 Python stdlib 的一部分(不记得是哪个)。

我将这类事情放在一个函数中,该函数首先检查 UNIX 变体是否存在,如果(大概是因为它在 Windows 上运行)不存在,则回退到 ctypes。这样,如果 Python 确实在 Windows 上实现了 statvfs,它就会使用它。