【发布时间】:2018-11-08 04:32:19
【问题描述】:
using (StreamWriter writer = File.CreateText(FinishedFile))
{
int lineNum = 0;
while (lineNum < FilesLineCount.Min())
{
for (int i = 0; i <= FilesToMerge.Count() - 1; i++)
{
if (i != FilesToMerge.Count() - 1)
{
var CurrentFile = File.ReadLines(FilesToMerge[i]).Skip(lineNum).Take(1);
string CurrentLine = string.Join("", CurrentFile);
writer.Write(CurrentLine + ",");
}
else
{
var CurrentFile = File.ReadLines(FilesToMerge[i]).Skip(lineNum).Take(1);
string CurrentLine = string.Join("", CurrentFile);
writer.Write(CurrentLine + "\n");
}
}
lineNum++;
}
}
我目前这样做的方式太慢了。我正在合并每个 50k+ 行长的文件和不同数量的数据。
例如:
文件 1
1
2
3
4
文件 2
4
3
2
1
我需要将其合并为第三个文件
文件 3
1,4
2,3
3,2
4,1
附言用户可以从任何位置选择任意数量的文件。
感谢您的帮助。
【问题讨论】:
-
您的代码和您的问题陈述似乎不像我预期的那样匹配。您是否有恰好两个文件(File1 和 File2)并且您正在尝试将每个文件的组合添加到一个新文件(File3)?组合逻辑(伪代码)为:
file3[i] = file1[i] + "," + file2[i] -
在每次迭代中,您都会再次读取整个文件,您应该在每次迭代中逐行读取它们
-
@maccettura 这是任意数量的文件,它们都转到文件 3,我最后补充说,也许我的逻辑是问题,任何帮助都值得赞赏。我当前的代码正确地合并了它们,对于我使用的文件大小来说非常慢。
-
您的文件长度/行数是否相同?
-
@AdamStrobel 我看到了你最后写的东西,但它仍然没有意义。用户是否能够选择任何 两个 文件的路径?还是允许他们选择无限个文件的路径?
标签: c# performance merge