【发布时间】:2015-10-28 12:05:50
【问题描述】:
我必须合并数千个大文件(每个约 200MB)。我想知道合并这些文件的最佳方法是什么。行将有条件地复制到合并文件中。可以使用 File.AppendAllLines 还是使用 Stream.CopyTo 吗?
使用 File.AppendAllLines
for (int i = 0; i < countryFiles.Length; i++){
string srcFileName = countryFiles[i];
string[] countryExtractLines = File.ReadAllLines(srcFileName);
File.AppendAllLines(actualMergedFileName, countryExtractLines);
}
使用 Stream.CopyTo
using (Stream destStream = File.OpenWrite(actualMergedFileName)){
foreach (string srcFileName in countryFiles){
using (Stream srcStream = File.OpenRead(srcFileName)){
srcStream.CopyTo(destStream);
}
}
}
【问题讨论】:
-
对一个新文件使用
StreamWriter,并读取你想与StreamReader合并的所有文件并写给你的作家。 -
我怀疑很多人会回答“试试并比较两者”。
-
我相信你会想要一个
StreamReader并逐行遍历文件,因为这样它不会一次将所有内容都存储在内存中。 -
您只想附加文件吗?如果是这样,请使用
Stream.CopyTo(),但使用File.Open("filename", FileMode.Append)打开要附加到的现有文件。如果你使用File.OpenWrite(),事情就会大错特错。 -
那么你肯定不想这样做
ReadAllLines,因为这会让你将 200MB 的数据加载到内存中,正如 sab669 提到的那样