You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何使用SMBLIBRARY获取文件实际内容大小(替代AllocationSize)

使用SMBLIBRARY获取文件实际内容大小的方法

你当前通过AllocationSize获取的是文件在磁盘上的分配空间大小(磁盘按簇分配存储,哪怕文件实际内容很小,也会占用整簇的空间),而文件的实际内容大小对应的是EndOfFile属性——这个字段在你当前使用的FileDirectoryInformation结构体里就已经存在,不需要修改查询目录的逻辑,直接替换字段即可。

修改后的代码

if (status == NTStatus.STATUS_SUCCESS)
{
    List<QueryDirectoryFileInformation> fileList;
    status = fileStore.QueryDirectory(out fileList, directoryHandle, "*", FileInformationClass.FileDirectoryInformation);
    status = fileStore.CloseFile(directoryHandle);

    foreach(FileDirectoryInformation file in fileList)
    {
        Console.WriteLine($"Filename: {file.FileName}");
        // 替换为EndOfFile获取实际内容大小
        Console.WriteLine($"File Actual Size: {file.EndOfFile / 1024}KB");
        Console.WriteLine($"Created Date: {file.CreationTime.ToString("f")}");
        Console.WriteLine($"Last Modified Date: {file.LastWriteTime.ToString("f")}");
        Console.WriteLine();                            
    }
}

补充说明

  • EndOfFile的值就是文件实际存储的字节数,完全对应文件内容的真实大小。
  • 如果后续需要获取更多文件标准信息,也可以将FileInformationClass.FileDirectoryInformation替换为FileInformationClass.FileStandardInformation,不过前者已经包含了我们需要的EndOfFile字段,无需额外调整查询逻辑。

内容的提问来源于stack exchange,提问作者Michel

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.04 06:41:19