none
如何获得文件实际占用空间大小 RRS feed

  • 问题

  • 文件的占用空间,在不压缩的情况下略比文件大小大;如果用ntfs的压缩功能,会比文件大小小。

    请问如何获得那个实际占用的空间呢?

    2011年3月11日 0:44

答案

  • 用P/Invoke使用API GetCompressedFileSize 位于kernel32.dll中

    http://msdn.microsoft.com/zh-cn/library/CCA91080-2270-4996-8693-933C585FF168(v=vs.85,d=lightweight).aspx

    2011年3月11日 1:54
  • 这个取决于你硬盘的扇区大小。硬盘不可能按照每一个字节来寻址---32位最大寻址空间只有2的32次方个地址。因此要想管理整个硬盘空间的话,就只能把硬盘切割成很多小饼--扇区,每个扇区有一定的大小。每次寻址OS就默认读出一个完整的扇区,而不管这个扇区实际被文件占用了几个字节。

    如果你想知道文件的实际大小,而且精确到Byte的话,那么就用二进制形式把文件整体加载到内存中数一下byte就可以了。 system.OS,File好像就提供这种形式。


    信奎爷,无所畏惧!!
    2011年3月11日 6:44

全部回复

  • 用P/Invoke使用API GetCompressedFileSize 位于kernel32.dll中

    http://msdn.microsoft.com/zh-cn/library/CCA91080-2270-4996-8693-933C585FF168(v=vs.85,d=lightweight).aspx

    2011年3月11日 1:54
  • 这个取决于你硬盘的扇区大小。硬盘不可能按照每一个字节来寻址---32位最大寻址空间只有2的32次方个地址。因此要想管理整个硬盘空间的话,就只能把硬盘切割成很多小饼--扇区,每个扇区有一定的大小。每次寻址OS就默认读出一个完整的扇区,而不管这个扇区实际被文件占用了几个字节。

    如果你想知道文件的实际大小,而且精确到Byte的话,那么就用二进制形式把文件整体加载到内存中数一下byte就可以了。 system.OS,File好像就提供这种形式。


    信奎爷,无所畏惧!!
    2011年3月11日 6:44