0

我一直在寻找一种将大文件(几千兆字节)连接在一起而不必重写其中一个文件的方法。我确信操作系统在操作主文件表时会在内部执行此操作。这纯粹是针对速度至关重要的内部应用程序,即使以数据完整性为代价(如果冒着未记录的 API 的风险)。该应用程序处理大量高带宽、多通道以太网数据,其中损坏的工作单元(在本例中为文件)不会对整体处理结果产生很大影响。

在合并文件A和的那一刻B,所涉及的工作量等于:A[Read] + B[Read] +C[Write]`。你们中的任何一位 NT 专家会阐明如何解决这个问题以直接进入 MFT 吗?

我无法获得有关要探索哪个 API 的任何线索,并且希望得到一些指示。尽管该应用程序处于托管状态,但我很乐意探索原生 API,甚至设置轻量级 VM 进行测试。

提前致谢。

4

3 回答 3

0

这不是文件系统真正会做的事情。文件系统根据簇和数据块为文件分配空间,而不是字节。像这样连接两个文件只有在它们都是集群大小的倍数时才有效,并且 FS 可能对如何将块分配给幕后文件有其他假设。如果您卸载文件系统并编写一个工具来直接操作所有文件系统结构,您也许可以自己对文件系统执行此操作。但是,如果这样做,您将面临损坏整个磁盘的风险,而不仅仅是单个文件。

于 2014-03-20T17:01:46.863 回答
0

如果要将文件 B 附加到文件 A,您所要做的就是打开文件 A 进行write+append,寻找文件末尾,然后从 B 读取并写入 A。

如果要创建文件 C 作为文件 A 和文件 B 的串联,则必须创建文件 C 并将 A 复制到 C,然后将 B 复制到 C。

没有捷径可走。

于 2014-03-20T17:39:10.193 回答
0

我不知道您的确切情况,但是否可以根本不将文件附加在一起?只需在接收数据时继续将文件扔到某个目录中,并保留索引

那么当需要数据时,使用索引将数据拼凑起来创建一个新文件?所以你只做昂贵的文件按需合并?

于 2014-03-21T16:59:13.030 回答