0

每个文件夹都有一长串文本文件(大约 80 - 100 个文件)。我必须将每 4 个文本文件合并为一个文本文件。每个文本文件都是一个单独的 SQL 插入命令,因此必须在输出文件中保留 4 个文本文件中第一个文件的第一行(INSERT INTO database (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++;
            }
        }
4

2 回答 2

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);
        }

       ...
    }
 }
于 2012-09-11T22:15:13.823 回答
0

您可以将auto Flush设置为 true 属性或使用Flush方法,
但是让流保持打开状态是不好的,因此如果可能的话,在您知道不需要它时将其关闭

于 2012-09-11T22:57:39.060 回答