【问题标题】:Quickly create a large file on FAT在 FAT 上快速创建大文件
【发布时间】:2012-05-30 09:39:16
【问题描述】:

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

编辑:似乎要遵守 FAT 规范,Windows 将不得不分配所有数据块并将它们零初始化,因为 FAT 会执行“集群链接”。所以我想我要求的是不可能的,但是我会留下这个问题以防万一。

【问题讨论】:

    标签: windows winapi file-io filesystems fat32


    【解决方案1】:

    Alex 说得对,就执行时间而言这是最快的方式,但写入 FAT 并非易事。我的理解是,您将不得不处理扇区大小和碎片化问题。这是 LGTM 的open source FAT32 implementation

    就您需要编写的代码量而言,最快的方法是option 1 in this Raymond Chen blog post

    简而言之:

    1. 创建文件
    2. 寻求结束
    3. 写一个字节

    奖励:它也适用于 NTFS(我正在使用它的一个应用程序)。

    【讨论】:

      【解决方案2】:

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

      我不记得您究竟是如何在 Windows 中获得如此低级/原始的访问权限的。我认为您只需要打开设备卷(或物理设备),然后它就可以作为原始数据访问。详见 MSDN 上CreateFile() 的描述。在 Vista+ 上,您的应用可能需要对此具有特殊访问权限。

      【讨论】:

        【解决方案3】:

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

        【讨论】:

          【解决方案4】:

          也许试试fsutil会有用:

          fsutil 文件 [createnew](文件名)(长度)

          【讨论】:

            猜你喜欢
            • 2010-11-02
            • 2010-09-20
            • 2013-05-22
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2018-12-01
            • 1970-01-01
            相关资源
            最近更新 更多