2

私は大学のプロジェクトでこれを行っていて、問題に遭遇しました。ファイルから複数の行をロードすることはできましたが、それらをファイルに保存することはできません。単一の文字列をファイルに保存できます。これは、最後に処理された文字列ですが、それだけです。ループを実行することで完全に間違っている可能性がありますが、他の方法は考えられません。savefile セクションのコーディングは次のとおりです。

    case "s":
    case "8":
        {
            int savecount = 0;
            string savestring = "";

            //Clear the text file ready to be saved
            using (FileStream fs = File.Create("billing.txt"))
            {

            }

            while (savecount != CustomerCount)
                {
                    using (StreamWriter save = new StreamWriter("billing.txt"))
                        {
                //Create the string to save to the file
                            savestring = CustomerNumber[savecount] + ","
                              + CustomerName[savecount] + ","
                              + Address[savecount] + ","
                              + RateScheme[savecount] + ","
                              + PeakKWH[savecount] + ","
                              + OffPeakKWH[savecount] + ","
                              + StandardKWH[savecount];

                            Console.WriteLine(savestring);

                            save.WriteLine(savestring);

                            savecount++;
                            Console.ReadLine();
                          }
                 }
            Console.WriteLine("All data saved successfully");
            Console.ReadLine();
            break;
        }

ここからどこへ行くべきかわからない。どんな助けでもいただければ幸いです

4

4 に答える 4

1

ループの前にファイルを開いて保存する必要があります。例えば

using (StreamWriter save = new StreamWriter("billing.txt")) {
    while (savecount != CustomerCount) { 
        // rest of your code here

現時点では、各ループでファイルを開き、行を書き出しています。次に、それを再度開きます(すでに書き込まれたデータは失われます)。

コメントで指摘されているように、呼び出す必要はありませんFile.Create。デフォルトでStreamWriterは、既存のファイルが上書きされます。

于 2013-10-11T10:33:02.550 に答える
1

using { }毎回データを上書きしているため、ファイルの最後の項目を見て、ファイル内に while ループが必要です。

using (StreamWriter save = new StreamWriter("billing.txt"))
{
     while (savecount != CustomerCount)
     {
       //Create the string to save to the file
       string savestring = CustomerNumber[savecount] + ","
       + CustomerName[savecount] + ","
       + Address[savecount] + ","
       + RateScheme[savecount] + ","
       + PeakKWH[savecount] + ","
       + OffPeakKWH[savecount] + ","
       + StandardKWH[savecount];

       Console.WriteLine(savestring);

       save.WriteLine(savestring);

       savecount++;
       Console.ReadLine();
   }
}
于 2013-10-11T10:35:08.643 に答える
1

あなたが間違っているのは、 while の各反復でファイルを開き、ファイルに行を書き込んでから、ファイルを再度開いて内容を上書きしていることです。コードを再変更できます

using (StreamWriter save = new StreamWriter("billing.txt")) 
{
   while (savecount != CustomerCount) 
   { 
     // rest of string formation of saveString logic and save.WriteLine(savestring); goes here
     .....
   }
}

すべての入力文字列をリストに保存し、 File.WriteAllLines 関数を次のように使用できる単純なコードも使用できると思います

     {
       ....   
        List<string> Customers = new List<string>();
        for (savecount = 0; savecount < CustomerCount; savecount++)
        {            
         //Create the string to save to the file
            Customers.Add( CustomerNumber[savecount] + "," + CustomerName[savecount] + "," + Address[savecount] + "," + RateScheme[savecount] + "," + PeakKWH[savecount] + "," + OffPeakKWH[savecount] + "," + StandardKWH[savecount]);

            Console.WriteLine(Customers[savecount]);
        }

        string filePath = "billing.txt"; // This is your file path where all the contents are to be written
        File.WriteAllLines(filePath, Customers);
       ..........
     }
于 2013-10-11T10:50:51.450 に答える