我需要合并数千个大文件(每个文件约200MB)。我想知道最好的合并方法是什么。行将被有条件地复制到合并后的文件中。可以使用File.AppendAllLines或Stream.CopyTo吗?
使用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
读取您想要合并的所有文件,并写入您的写入器。 - CamoStreamReader
并逐行迭代文件,因为这样它不会一次性将所有内容存储在内存中。 - sab669Stream.CopyTo()
,但使用File.Open("filename", FileMode.Append)
打开要追加的现有文件。如果使用File.OpenWrite()
,会出现严重错误。 - Matthew WatsonReadAllLines
,因为正如sab669所提到的那样,这会将200MB的数据加载到内存中。 - Zdeněk Jelínek