0

フォルダごとにテキストファイルの長いリスト(約80〜100ファイル)があります。4つのテキストファイルごとに1つのテキストファイルに結合する必要があります。各テキストファイルは個別のSQLInsertコマンドであるため、4つのテキストファイルの最初の行(INSERT INTO database(value1、value2、value3)VALUES)を出力ファイルに保持する必要があります。残りの3つのファイルはスキップする必要があります。最初の行に値があります。

私が抱えている問題は、4つのファイルの最後を結合するときに、最後のファイルが最後のファイルの約半分だけを新しい結合ファイルにコピーすることです。

3つのファイルまたは2つのファイルだけを1つに結合しようとしても。それでも、最後のファイルの約半分しかコピーされません。

これが私のコードです。

fourCount4番目のテキストファイルが結合されたことを示します。

        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 に答える