怎么合并两个文件为一个文件
如何合并两个文件为一个文件
两个文件,如何才能将它们合并到一起。
当然不是分别读出两个文件顺次写入硬盘。
我知道FAT32文件系统,似乎可以修改FAT表,将文件的link进行修改而达到合并的目的。不过没有做过。
NTFS不知道怎么做。
有例子吗?
------解决方案--------------------
没有,你想简单的链接恐怕要改文件分配表了。
去找找NTFS文件分配表的资料吧。
------解决方案--------------------
关键是什么样的文件,文件逻辑结构是什么样的.
如果光硬写的话,CFile write就可以了
------解决方案--------------------
不知道你到底要做什么?给你一点思路吧。
所有的文件都有一个固定的文件结尾标记,0xFEFF(0xFFFE,忘记是哪个了),
每次文件按照磁盘的最小存储单位(簇)存放文件,如何一个文件516个字节,最小长度(每个簇512个字节),该文件将占2个簇,第一个簇的最后4个字节(32bit)表明文件下一个簇的位置,第二簇则从508个字节开始一直到存储完成,后面紧跟0XFEFF,再后面就是随机的。
磁盘上直接合并两个文件,就要更改上一个文件最后一个簇的数据,同时修改后面一个文件的所有簇上的数据,并在文件登记表上删除后面的文件标记。
因此存在以下的问题:
1.必须完成直接对磁盘的簇进行操作;
2.NTFS,FAT,不同的文件结构将有不同的操作;
3.不能跨磁盘分区进行,ntfs可能还不能跨文件夹;
4.很可能导致与系统文件操作指令冲突,在操作时需要设置硬件中断;
5.这样的操作比操作系统操作更浪费时间,大约在10倍以上!
如果你还有兴趣的,你可以去做!但是如果你要合并word之类序列化存储的文件话,可能出现合并后的文件无法打开!
如果只是考虑合并两个文件,又要速度快,给你一个思路:
磁盘剩余空间必须大于你要合并的文件。
分段读取要追加的文件,并追加到上一个文件的尾部,追加完成后删除该文件!
这样占有内存小,而且速度方面也很快。
------解决方案--------------------
分段读取不用担心文件过大而导致内存不足,第一个文件只是打开,并不读取任何数据,内存大约占4-8k,后面的一个分段读取,占用内存的大小与你设置的块的大小有关!建立一个循环,直到追加完成!
------解决方案--------------------
要标志一个文件是否被我们处理过。原文件里增加一段数据?为什么不加在末尾?而要加在前面?你增加一段数据标志应该是不会太多才是。
你也可以仿照微软缩略图处理的方式,在文件夹下隐藏一个保存数据信息的文件。
------解决方案--------------------
------解决方案--------------------
1.驱动实现的话加在头部,对驱动加载之后创建的文件,性能上可以忽略不计。卸载驱动之后恢复数据可能就有些慢了。不过对透明加密来说也很少有这种要求,是比较通用的做法。
2.
------解决方案--------------------
果然被我猜中了,哈哈
两个文件,如何才能将它们合并到一起。
当然不是分别读出两个文件顺次写入硬盘。
我知道FAT32文件系统,似乎可以修改FAT表,将文件的link进行修改而达到合并的目的。不过没有做过。
NTFS不知道怎么做。
有例子吗?
------解决方案--------------------
没有,你想简单的链接恐怕要改文件分配表了。
去找找NTFS文件分配表的资料吧。
------解决方案--------------------
关键是什么样的文件,文件逻辑结构是什么样的.
如果光硬写的话,CFile write就可以了
------解决方案--------------------
不知道你到底要做什么?给你一点思路吧。
所有的文件都有一个固定的文件结尾标记,0xFEFF(0xFFFE,忘记是哪个了),
每次文件按照磁盘的最小存储单位(簇)存放文件,如何一个文件516个字节,最小长度(每个簇512个字节),该文件将占2个簇,第一个簇的最后4个字节(32bit)表明文件下一个簇的位置,第二簇则从508个字节开始一直到存储完成,后面紧跟0XFEFF,再后面就是随机的。
磁盘上直接合并两个文件,就要更改上一个文件最后一个簇的数据,同时修改后面一个文件的所有簇上的数据,并在文件登记表上删除后面的文件标记。
因此存在以下的问题:
1.必须完成直接对磁盘的簇进行操作;
2.NTFS,FAT,不同的文件结构将有不同的操作;
3.不能跨磁盘分区进行,ntfs可能还不能跨文件夹;
4.很可能导致与系统文件操作指令冲突,在操作时需要设置硬件中断;
5.这样的操作比操作系统操作更浪费时间,大约在10倍以上!
如果你还有兴趣的,你可以去做!但是如果你要合并word之类序列化存储的文件话,可能出现合并后的文件无法打开!
如果只是考虑合并两个文件,又要速度快,给你一个思路:
磁盘剩余空间必须大于你要合并的文件。
分段读取要追加的文件,并追加到上一个文件的尾部,追加完成后删除该文件!
这样占有内存小,而且速度方面也很快。
------解决方案--------------------
分段读取不用担心文件过大而导致内存不足,第一个文件只是打开,并不读取任何数据,内存大约占4-8k,后面的一个分段读取,占用内存的大小与你设置的块的大小有关!建立一个循环,直到追加完成!
------解决方案--------------------
要标志一个文件是否被我们处理过。原文件里增加一段数据?为什么不加在末尾?而要加在前面?你增加一段数据标志应该是不会太多才是。
你也可以仿照微软缩略图处理的方式,在文件夹下隐藏一个保存数据信息的文件。
------解决方案--------------------
------解决方案--------------------
1.驱动实现的话加在头部,对驱动加载之后创建的文件,性能上可以忽略不计。卸载驱动之后恢复数据可能就有些慢了。不过对透明加密来说也很少有这种要求,是比较通用的做法。
2.
------解决方案--------------------
果然被我猜中了,哈哈