我想制作一个类似于zerofree for linux的工具。我想通过分配一个大文件而不将其归零来寻找非零块并重写它们。
使用管理员权限,uTorrent可以执行此操作:http://www.netcheif.com/Articles/uTorrent/html/AppendixA_02_12.html#diskio.no_zero,但它是封闭源。
答案 0 :(得分:1)
我不确定这会回答你的问题(需要),但这样的工具已经存在。您可以查看fsutil.exe Fsutil command line tool。此工具具有发现NTFS文件内部结构的巨大潜力,还可以创建任何大小的文件(无需手动将其归零)。希望有所帮助。
答案 1 :(得分:1)
写了一个工具https://github.com/basinilya/winzerofree。它使用SetFileValidData()
作为@RaymondChen建议
答案 2 :(得分:0)
您应该尝试SetFilePointerEx
请注意,将文件指针设置为某个位置不是错误 超出文件末尾。
因此,在您创建文件后,请致电SetFilePointerEx
然后SetEndOfFile
或WriteFile
或WriteFileEx
并关闭该文件,大小应该增加。
修改强>
Raymonds建议SetValidData也是一个很好的解决方案,但这会重新设置权限,所以不应该经常被任何人使用。
我的解决方案在NTFS上是最好的,因为它支持称为初始化大小的功能,这意味着在使用SetFilePointerEx
数据后不会将数据初始化为零,但在尝试读取未初始化的数据后将收到零。
总而言之,如果NTFS使用SetFilePointerEx
,如果FAT(不太可能) - 使用SetValidData