文件的实际大小

Hge*_*geg 1 python metadata file

我正在尝试获取仍由另一个进程下载的文件的大小.我使用下面的代码(我在这里找到):

os.stat(filepath).st_blocks*512
Run Code Online (Sandbox Code Playgroud)

但是,它还返回文件的分配大小.在最近的检查中,我发现这个解决方案的准确性取决于它正在进行的操作系统.目前,我的操作系统是带有ext3文件系统的ubuntu 12.04服务器.有没有其他方法可以在python中找到真正的文件大小?

Som*_*ude 7

从以下文档stat():

在某些Unix系统(例如Linux)上,还可以使用以下属性:

  • st_blocks - 为文件分配的512字节块数
  • st_blksize - filesystem blocksize
  • st_rdev - 如果是inode设备的设备类型
  • st_flags - 用户定义的文件标志

你似乎想要的是st_blocks * st_blksize.请注意,这不是文件的实际大小,即文件的st_size成员.块数乘以块大小将大于实际文件大小.


注意:当它显示" st_blocks - 为文件分配的512字节块的数量"时,该数字512实际上取决于系统.POSIX规范

在POSIX.1-2008中未定义stat结构的st_blocks成员的单位.在一些实现中,它是512字节.它可能因文件系统而异.

如果该st_block属性可用,那么如果它是其他值,请不要感到惊讶.

  • 似乎 ``file_stat.st_blocks * 512`` 给出了正确的结果,而不管 ``st_blksize`` 。stat 手册页 (https://linux.die.net/man/2/stat) 也将“st_blksize”简单地描述为“用于高效文件系统 I/O 的“首选”块大小。 (2认同)