在FAT上快速创建一个大文件

时间:2012-05-30 09:39:17

标签: windows winapi file-io filesystems fat32

在Windows中的FAT MicroSD上创建大文件的最快方法是什么?到目前为止,所有解决方案都显示了导致稀疏文件的方法,但我需要预先分配所有扇区(因为它将被数据记录器使用)。目前我只写了几千兆的零,但这需要很长时间。

编辑:似乎要遵守FAT规范,Windows必须分配所有数据块并对其进行零初始化,因为“群集链接”FAT会这样做。所以我想我要求不可能的事情,但是为了以防万一,我会把问题留下来。

4 个答案:

答案 0 :(得分:1)

Alex正确地说这是执行时间最快的方式,但写入FAT并非易事。我的理解是你必须处理行业规模和分散。这是LGTM的open source FAT32 implementation

关于您需要编写的代码的最快方式是option 1 in this Raymond Chen blog post

简而言之:

  1. 创建文件
  2. 寻求结束
  3. 写一个字节
  4. 奖励:它也适用于NTFS(我使用它正在处理的一个应用程序)。

答案 1 :(得分:0)

最快的方法是直接访问具有FAT控制数据的扇区,并分配足够长的簇链,并为该文件创建目录条目,并使其指向链的第一个簇。这可以避免写入千兆字节的零。如果您从空的预格式化介质开始并且不需要保留任何先前写入的数据,这应该是一项微不足道的任务。您可以硬编码控制数据区域的内容并避免FAT解析。

我不记得你在Windows中如何获得这种低级/原始访问权限。我认为您只需要打开设备卷(或物理设备),然后它就可以作为原始数据访问。请参阅MSDN上CreateFile()的说明中的详细信息。您的应用可能需要在Vista +上具有此特殊访问权限。

答案 2 :(得分:0)

应该可以使用CreateFile创建文件(使用SetEndOfFile)并在之后设置文件的大小。不确定Windows是否对扇区进行零初始化。如果我没记错的话,它在Windows XP下的FAT32分区上没有。

答案 3 :(得分:0)

尝试fsutil时可能会有用:

  

fsutil file [createnew](FileName)(Length)