我一直在寻找一种将大文件(几GB)连接在一起而不必重写其中一个文件的方法。我确信操作系统在操作主文件表时会在内部执行此操作。这完全适用于内部应用程序,即使以数据完整性为代价(在存在未记录API的风险的情况下),速度也是至关重要的。该应用程序处理大量高带宽、多通道以太网数据,其中损坏的工作单元(本例中为文件)不会对整体处理结果产生很大影响。
在组合文件A
和B
时,所涉及的工作量等于:A[Read] + B[Read] +
C[Write]`。你们中的任何一位NT大师会告诉我们如何绕过这一点,直接进入MFT吗?
我还没能获得任何线索来探索哪一个API,希望能提供一些建议。尽管该应用程序是托管的,但我很乐意探索本机API,甚至设置轻量级虚拟机进行测试。
提前谢谢。
如果您要将文件B附加到文件A,您所要做的就是打开文件A进行写入+附加,查找文件末尾,然后从B读取并写入A。
如果你想创建文件C作为文件A和文件B的级联,那么你必须创建文件C并将A复制到C,然后将B复制到C。
没有捷径可走。
这不是文件系统真正会做的事情。文件系统根据集群和数据块而不是字节为文件分配空间。只有当两个文件都是集群大小的倍数时,像这样连接两个文件才能工作,并且FS可能对如何将块分配给隐藏的文件有其他假设。如果您卸载文件系统并编写一个工具来直接操作所有文件系统结构,您可能可以自己对文件系统执行此操作。但是,如果这样做,就有损坏整个磁盘的风险,而不仅仅是损坏一个文件。
我不知道你的确切情况,但有可能根本不把文件附加在一起吗?只需在接收数据时不断将文件放入某个目录,并保留一个索引
然后,当需要数据时,使用索引将数据拼凑在一起以创建一个新文件?所以你只会按需进行昂贵的文件合并吗?