【问题标题】:How to get "true" file size with filesystem library? (C++17)如何使用文件系统库获得“真实”文件大小? (C++17)
【发布时间】:2019-08-02 15:19:43
【问题描述】:

我正在使用filesystem 库中的file_size 函数来获取文件的大小。它似乎工作正常,因为我得到的数字与文件属性中的“大小”相匹配,但我想要“磁盘上的大小”。我将如何获得这个?

【问题讨论】:

标签: c++ winapi filesystems c++17


【解决方案1】:

使用纯 C++ 是不可能的。

磁盘上的实际大小可以通过调用GetDiskFreeSpace() 来获取扇区/簇和字节/扇区的数量。将这两者相乘得到字节/簇,然后将实际文件大小(使用 C++ 或 GetCompressedFileSizeW() 获得)四舍五入到下一个倍数。

例如,如果 bps 为 512,spc 为 4,则 bpc 为 2048。如果文件大小为 4000,则磁盘大小为 4096。

【讨论】:

  • 您想使用GetCompressedFileSizeW 而不是GetFileSizeEx
  • 存在更简单明了的解决方案 - FILE_STANDARD_INFO.AllocationSize - 这是为文件分配的磁盘空间,FILE_STANDARD_INFO.EndOfFile - 文件大小。所以打电话给GetFileInformationByHandleEx FileStandardInfo
  • @RbMm 不完全相同,在您的情况下,您需要一个文件句柄,这意味着您必须打开文件。
  • 但是文件无论如何都需要打开文件,你认为GetCompressedFileSizeW没有打开文件?
  • @RbMm,不,至少不在我这边。 Windows 是否打开它是另一个问题。
猜你喜欢
  • 1970-01-01
  • 2021-09-30
  • 2015-01-28
  • 1970-01-01
  • 2021-09-13
  • 2013-12-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多