将多个文件内容写入单个文件的有效方法

时间:2011-07-28 03:49:23

标签: c multithreading algorithm file pthreads

有n个文件大小不一。我们如何才能有效地将所有文件的内容附加到单个文件中?

技术或算法有帮助吗?基本上我期待用c语言实现这一目标的有效方法。

4 个答案:

答案 0 :(得分:3)

开始简单。多线程将引入显着的复杂性,并不一定会使事情运行得更快。伪代码时间:

Create a new file "dest" in write-only mode.
For each file "source" you want to append:
    Open "source" in read-only mode
    For each line "L" in "source":
        Write "L" to "dest"
    Close "source"
Close "dest"

顺便说一句,使用简单的命令行Linux工具(cat等)来实现这一点很简单(并且接近最优),尽管它不能完全移植到Windows。单线示例:

for i in `find . -type f -name "*.txt"`; do cat $i >> result.out; done

(查找当前目录中的每个.txt文件并将其附加到result.out。)

答案 1 :(得分:2)

浏览并找到所有文件的总大小。

然后分配该大小的输出文件,再次浏览它们并将数据写入输出。

答案 2 :(得分:1)

由于我不知道文件的内容是什么或附加它们的目的,如果只是文本或其他东西,这个解决方案可能不是最好的。但是,我可能会找到一个可以使用的zip库(许可或开源),然后将所有文件压缩到一个存档中。

zlib看起来很有趣:http://www.zlib.net/

答案 3 :(得分:0)

  1. 获取每个文件的大小Sn并计算所有文件的总大小T
  2. 创建目标文件
  3. 使用mmap映射大小为T的dest文件,您将获得指向memmap区域起始地址的指针P
  4. 将每个文件映射到mem,并按顺序将每个数据复制到上面的区域。
  5. 之后,您将获得包含来自所有文件的所有数据的目标文件