读取和写入文本文件C#

时间:2015-06-18 17:54:41

标签: c#

我有一个名为FileName的主文件,ID为人。它按排序顺序排列。 我想将ID分成27个块,并将每个块复制到不同的文本文件中。

using (FileStream fs = File.Open(FileName, FileMode.Open, FileAccess.Read, FileShare.ReadWrite))
         {
            string line;
      int numOfLines = File.ReadAllLines(FileName).Length;  -- I have 73467
       int eachSubSet = (numOfLines / 27);
       var lines = File.ReadAllLines(dataFileName).Take(eachSubSet);
       File.WriteAllLines(FileName1,lines);
      }

我有27个不同的文本文件。所以我希望将73467个ID平均分配并复制到27个不同的文件。因此,第一个文件将ID#1发送到ID#2721 第二个Dile的ID为#2722到ID#(2722 + 2721),依此类推。我不知道如何自动执行此操作并快速运行。

由于 HR

2 个答案:

答案 0 :(得分:2)

最简单的方法是在循环中运行File.ReadLine和WriteLine,并决定哪个文件将接收哪一行。

我不建议你并行化这个例程,因为它是一个IO操作,但只是行的副本会很快。

答案 1 :(得分:-1)

请注意,在示例代码中,您调用了File.ReadAllLines两次,因此您实际上会解析整个输入文件两次。 因此,避免这种情况会加快进程,并且您实际上没有拆分文件,您只能编写27中的第一个文件。 未经测试,但这些方面应该有效:

const int numOfFiles = 27;
string[] lines = File.ReadAllLines(FileName);
int numOfLines = lines.Length;
int eachSubSet = numOfLines/numOfFiles;
int firstSubset = numOfLines%numOfFiles + eachSubSet;
IEnumerable<string> linesLeftToWrite = lines;
for (int index = 0; index < numOfFiles; index++)
{
    int numToTake = index == 0 ? firstSubset : eachSubSet;
    File.WriteAllLines(string.Format("{0}_{1}.txt", FileName, index), linesLeftToWrite.Take(numToTake));
    linesLeftToWrite = linesLeftToWrite.Skip(numToTake);
}