在NTFS上分配文件而不进行归零

时间:2014-08-04 12:57:37

标签: winapi file-io ntfs

我想制作一个类似于zerofree for linux的工具。我想通过分配一个大文件而不将其归零来寻找非零块并重写它们。

使用管理员权限,uTorrent可以执行此操作:http://www.netcheif.com/Articles/uTorrent/html/AppendixA_02_12.html#diskio.no_zero,但它是封闭源。

3 个答案:

答案 0 :(得分:1)

我不确定这会回答你的问题(需要),但这样的工具已经存在。您可以查看fsutil.exe Fsutil command line tool。此工具具有发现NTFS文件内部结构的巨大潜力,还可以创建任何大小的文件(无需手动将其归零)。希望有所帮助。

答案 1 :(得分:1)

写了一个工具https://github.com/basinilya/winzerofree。它使用SetFileValidData()作为@RaymondChen建议

答案 2 :(得分:0)

您应该尝试SetFilePointerEx

  

请注意,将文件指针设置为某个位置不是错误   超出文件末尾。

因此,在您创建文件后,请致电SetFilePointerEx然后SetEndOfFileWriteFileWriteFileEx并关闭该文件,大小应该增加。

修改

Raymonds建议SetValidData也是一个很好的解决方案,但这会重新设置权限,所以不应该经常被任何人使用。 我的解决方案在NTFS上是最好的,因为它支持称为初始化大小的功能,这意味着在使用SetFilePointerEx数据后不会将数据初始化为零,但在尝试读取未初始化的数据后将收到零。

总而言之,如果NTFS使用SetFilePointerEx,如果FAT(不太可能) - 使用SetValidData