0

1000 000レコードのテキストファイルがあるので、ファイルを多くのファイルに分割して、それぞれに100レコードを作成します。これが、listbox1を使用してファイルを制御したコードです。コードは機能していますが、欠落しているレコードが少なくなっています。

private void WriteToFile()
    {
        int RowCount = listBox1.Items.Count;
        string FileName = "C:\\Users\\bbdnet0986\\Documents\\MyExpotedQADATA";
        StreamWriter sw = new StreamWriter(FileName + ".txt");
        int inc = 0;
        int counter = 0;
        //StreamWriter sw = new StreamWriter(FileName+inc + ".txt");
        for (int i = 0; i < listBox1.Items.Count; i++)
        {
             sw.WriteLine(listBox1.Items[i].ToString());
             string me = listBox1.Items[i].ToString();

             if (RowCount > 100)
             {

                 listBox2.Items.Add(listBox1.Items[counter].ToString());
                 counter++;
                 if (counter == 100)
                 {

                     inc++;
                     sw = new StreamWriter(FileName + inc + ".txt");


                     RowCount = RowCount - counter;
                     counter = 0;

                 }
             }

             else
             {
                  sw.WriteLine(listBox1.Items[i].ToString());
             }

         }
         sw.Close();
    }
4

3 に答える 3

0

この行で:

sw = new StreamWriter(FileName + inc + ".txt");

前の SW を .Flush() する必要があります。ライターはバッファリングされているため、一部のレコードが欠落しています。

于 2012-07-19T12:45:41.457 に答える
0

あなたの質問があなたの とどのように関連しているのかわかりませんListBox.

Linqとで簡単Enumerable.GroupByです:

int maxLineCount = 100;
FileInfo file = new FileInfo(hugeFilePath);

var fileGroups = File.ReadLines(file.FullName)
    .Select((l, i) => new { Line = l, Index = i })
    .GroupBy(x => x.Index / maxLineCount)
    .Select(grp => new { FileIndex = grp.Key, Lines = grp.Select(x => x.Line)});

foreach (var grp in fileGroups)
{
    var fileName = "File" + grp.FileIndex;
    var path = Path.Combine(@"C:\Temp\Test", fileName + file.Extension).ToString();
    File.WriteAllLines(path, grp.Lines);
}

File.ReadLinesすべてをメモリにロードするのではなく、行をストリーミングすることに注意してください。

于 2012-07-19T12:46:22.060 に答える