【发布时间】:2011-02-26 04:26:13
【问题描述】:
我有几个文件的内容需要合并到一个文件中。我有以下代码可以做到这一点......但在内存使用方面似乎相当低效......你会建议一个更好的方法吗?
Util.MoveFile 函数只是考虑跨卷移动文件
private void Compose(string[] files) { string inFile = ""; string outFile = "c:\final.txt"; using (FileStream fsOut = new FileStream(outFile + ".tmp", FileMode.Create)) { foreach (string inFile in files) { if (!File.Exists(inFile)) { continue; } byte[] bytes; using (FileStream fsIn = new FileStream(inFile, FileMode.Open)) { bytes = new byte[fsIn.Length]; fsIn.Read(bytes, 0, bytes.Length); } //using (StreamReader sr = new StreamReader(inFile)) //{ // text = sr.ReadToEnd(); //} // write the segment to final file fsOut.Write(bytes, 0, bytes.Length); File.Delete(inFile); } } Util.MoveFile(outFile + ".tmp", outFile);}
【问题讨论】:
-
也许可以看到:在 C# 中连接三个文件的最快方法是什么? stackoverflow.com/questions/444309/…
-
为什么觉得效率低?
-
如果这些是文本文件,为什么不使用“cat”? en.wikipedia.org/wiki/Cat_%28Unix%29
-
@Alan - 代码在 Windows 上运行,所以没有“猫”。 @Changeling - 我觉得它效率低下,因为它使用了大量内存 @Mitch Wheat - 我正在查看代码,它只创建一个缓冲区,而不是大量新的字节调用......这应该真的有帮助:)
-
你能不能使用一个while循环,每次只读取每个文件的1024字节?读取整个文件有点多。
标签: c# file merge memory-efficient