如何将多个文本文件组合成4个组

时间:2012-09-11 22:13:04

标签: c# while-loop text-files streamreader streamwriter

我每个文件夹都有很长的文本文件列表(大约80-100个文件)。我必须将每4个文本文件合并为一个文本文件。每个文本文件都是一个单独的SQL Insert命令,因此必须在输出文件中保留4个文本文件中第一个的第一行(INSERT INTO数据库(value1,value2,value3)VALUES),其余3个文件应跳过第一行,只有值。

我遇到的问题是,当组合4个文件中的最后一个时,最后一个文件只将最后一个文件的一半复制到新的组合文件中。

即使我尝试将3个文件或2个文件合并为一个文件。它仍然只复制了最后一个文件的一半。

这是我的代码。

fourCount表示第4个文本文件的合并时间。

        string[] array2 = sqlInsertList.ToArray();
        StreamWriter outfile3 = new StreamWriter(folderPath.Text + "\\" + count + ".txt");
        count++;

        foreach (string dirFileName in array2)
        {
            StreamReader readFile = new StreamReader(dirFileName);
            string readFromFile = readFile.ReadLine();

            if(fourCount == 1)
            {
                outfile3 = new StreamWriter(folderPath.Text + "\\" + count + ".txt");
                outfile3.WriteLine(readFromFile);
            }


            while(!readFile.EndOfStream)
            {
                readFromFile = readFile.ReadLine();
                outfile3.WriteLine(readFromFile);
            }

            count++;
            if(fourCount == 4)
            {
                outfile3.WriteLine(";");
                fourCount = 1;
            }
            else
            {
                fourCount++;
            }
        }

2 个答案:

答案 0 :(得分:3)

您没有关闭,因此不刷新输出文件。

将其更改为:

 using(StreamWriter outfile3 = new StreamWriter(...))
 {
    count++;

    foreach (string dirFileName in array2)
    {

        if(fourCount == 1)
        {
            outfile3.Close();  // add this
            outfile3 = new StreamWriter(folderPath.Text + "\\" + count + ".txt");
            outfile3.WriteLine(readFromFile);
        }

       ...
    }
 }

答案 1 :(得分:0)

您可以将自动刷新设置为true属性或使用刷新方法,
然而,将流打开是不好的,如果可能的话,当你知道你不需要它时关闭它