在 Windows 的 FAT MicroSD 上创建大文件的最快方法是什么?到目前为止,所有解决方案都显示了导致文件稀疏的方法,但我需要预先分配所有扇区(因为它将被数据记录器使用)。目前我只写了几千兆字节的零,但这需要很长时间。
编辑:似乎要遵守 FAT 规范,Windows 将不得不分配所有数据块并将它们初始化为零,因为 FAT 会执行“集群链接”。所以我想我要求的是不可能的,但是我会留下这个问题以防万一。
在 Windows 的 FAT MicroSD 上创建大文件的最快方法是什么?到目前为止,所有解决方案都显示了导致文件稀疏的方法,但我需要预先分配所有扇区(因为它将被数据记录器使用)。目前我只写了几千兆字节的零,但这需要很长时间。
编辑:似乎要遵守 FAT 规范,Windows 将不得不分配所有数据块并将它们初始化为零,因为 FAT 会执行“集群链接”。所以我想我要求的是不可能的,但是我会留下这个问题以防万一。
Alex 说得对,就执行时间而言,这是最快的方式,但写入 FAT 并非易事。我的理解是,您将不得不处理扇区大小和碎片化问题。这是LGTM的开源 FAT32 实现。
就您需要编写的代码量而言,最快的方法是这篇 Raymond Chen 博客文章中的选项 1。
简而言之 :
奖励:它也适用于 NTFS(我正在使用它的一个应用程序)。
应该可以创建文件(使用CreateFile)并在之后使用SetEndOfFile设置文件的大小。不确定 Windows 是否对扇区进行了零初始化。如果我没记错的话,它在 Windows XP 下的 FAT32 分区上没有。
最快的方法是直接访问带有 FAT 控制数据的扇区并分配足够长的簇链,并为文件创建一个目录条目并使其指向链的第一个簇。这避免了写入千兆字节的零。如果您从空的预格式化媒体开始并且不需要保留任何先前写入的数据,这应该是一项微不足道的任务。您可以对控制数据区域的内容进行硬编码,避免 FAT 解析。
我不记得您如何在 Windows 中获得如此低级/原始的访问权限。我认为您只需要打开设备卷(或物理设备),然后它就可以作为原始数据访问。请参阅MSDN 上的CreateFile()描述中的详细信息。在 Vista+ 上,您的应用可能需要对此具有特殊访问权限。
也许尝试fsutil会很有用:
fsutil 文件 [createnew] (文件名) (长度)