首页 > 解决方案 > 将多个用户输入存储到 .txt 和 .bin C#

问题描述

我这里有一段代码用于我的班级,我正在输入正在写入 .txt 和 .bin 文件的值。

我的问题是我的 .txt 文件最终是空的,而我的 .bin 文件没有以二进制形式写入。

我相信我已正确编写并关闭了 .bin 文件和 .txt,但我的输入未正确存储

这是我的代码

static void Main(string[] args)
        {
            string numberOfStudents, studentName, studentHeight, studentWeight;
            int studentInput = 0, height;
            bool numberOutput, heightOutput, weightOutput;
            double weight; 




            Console.Write("Enter number of students: ");
            numberOfStudents = Console.ReadLine();
            numberOutput = int.TryParse(numberOfStudents, out studentInput);


            if (numberOutput == true)
            {  
                    if (studentInput <= 0)
                    {
                        Console.WriteLine("Number of students must be a positive integer (greater than 0)!");
                        Console.ReadKey();
                    }
                    else
                    {
                        for (int i = 1; i <= studentInput; i++)
                        {
                            Console.Write("Enter student name: ");
                            studentName = Console.ReadLine();

                            Console.Write("Enter student height in centimetres: ");
                            studentHeight = Console.ReadLine();
                            heightOutput = int.TryParse(studentHeight, out height);

                            Console.Write("Enter student weight in kilograms: ");
                            studentWeight = Console.ReadLine();
                            weightOutput = double.TryParse(studentWeight, out weight);

                        try
                        {
                            StreamWriter outputFile;

                            outputFile = new StreamWriter("test.txt");
                            outputFile.Write(numberOfStudents + studentName + studentHeight + studentWeight);
                            outputFile.Close();
                        }

                        catch (System.IO.IOException exc)
                        {
                            Console.WriteLine("There was an error!: " + exc.Message);
                        }

                        try
                        {
                            FileStream outputFile = new FileStream("outFile.bin", FileMode.Create);
                            BinaryWriter BinFile = new BinaryWriter(outputFile);
                            BinFile.Write(studentName + " " + studentHeight + " " + studentWeight);
                            BinFile.Close();
                        }

                        catch (System.IO.IOException exc)
                        {
                            Console.WriteLine("There was an error!: " + exc.Message);
                        }

                        FileStream dataOutput = new FileStream("Database", FileMode.Create);
                        BinaryWriter databaseFile = new BinaryWriter(dataOutput);

                        StreamWriter textOutput = new StreamWriter("outText.txt");

                        databaseFile.Write(studentName + " " + studentHeight + " " + studentWeight);

                        databaseFile.Close();
                        textOutput.Close();
                    }
                    }


            }

谢谢

标签: c#

解决方案


您快到了,但代码存在一些问题,可以稍微整理一下。

  1. 您正在创建 3 个文件:outFile.bin、outText.txt 和 test.txt。没有数据/文本写入outFile.txt,它在几行后打开然后关闭。往里看test.txt,它会有最后的学生数据(见下一点)。
  2. 您正在循环中写入文件,这会覆盖数据,因此只有最后一个用户数据被写入文件。使用outputFile = new StreamWriter("test.txt", true) 此重载StreamWriter将允许您选择附加到文件(true)或覆盖(false)。
  3. 我建议在using()写入文件或任何实现IDisposable. 例如,在打开 StreamWriter 时,您可以执行using (var outputFile = new StreamWriter("test.txt", true)) { }. 这确保了流写入器被垃圾收集器关闭和处理,(例如,您没有关闭dataOutput文件流,如果它在一个using(){}块中,它将自动为您处理)
  4. 这可以重构为只使用一个try {} catch {}块,每次写入文件时都不需要单独的 try/catch。

DocsBinaryWriter类_

以二进制形式将原始类型写入流,并支持以特定编码写入字符串。

所以,二进制写入器是用二进制写入的,但它写入的数据是字符串。它可以很容易地写出int, double,bool等。

这是你的 try/catch 块中的代码整理了一下(这只会创建 test.txt 和 outFile.bin):

try
{
    // will open or create file in 'append' mode
    using (var outputFile = new StreamWriter("test.txt", true))
    {
        outputFile.Write($"{numberOfStudents}, {studentName}, {studentHeight},{studentWeight}");
        outputFile.Write(Environment.NewLine);
    }
    using (BinaryWriter databaseFile = new BinaryWriter(File.Open("outFile.bin", FileMode.Append)))
    {                                 
        databaseFile.Write(studentName + " " + studentHeight + " " + studentWeight);
    }
}
catch (System.IO.IOException exc)
{
    Console.WriteLine("There was an error!: " + exc.Message);
}

推荐阅读