首页 > 解决方案 > 为什么我无法取回使用 C# 中的 BinaryReader 保存到 dat 文件的数据?如何使用 BinaryReader 正确实现这一点?

问题描述

我创建了一个带有构造函数的类,在其中我将参数作为 studentName、studentMarks 和 avgMarks 传递,并使用 Constructor 设置值并在 WriteData() 方法中使用 BinaryWriter 将数据写入 stud.dat 文件,然后使用 ReadData () 方法里面我使用 BinaryReader 从 stud.dat 文件中读取 thr 数据,但是在读取它时向我显示错误的输出,如下所示:

Enter Student 1 Name: ABC
Enter Student 1 Subject 1 Marks: 85
Enter Student 1 Subject 2 Marks: 90
Enter Student 1 Subject 3 Marks: 95
Press Y to continue
y
Enter Student 2 Name: XYZ
Enter Student 2 Subject 1 Marks: 65
Enter Student 2 Subject 2 Marks: 70
Enter Student 2 Subject 3 Marks: 75
Press Y to continue
N
ABC     85      90      95      90
ABC     1515804675      65      70      75

我应该怎么做才能使用 BinaryReader 和 BinaryWriter 检索我的数据。我的代码是:

using System;
using System.IO;

namespace BinaryWriterDemo
{
    class BinaryTesting
    {
        FileStream fs;
        string studentName;
        int[] studentMarks = new int[3];
        int avgMarks;
        int numOfStudents = 0;
        public BinaryTesting(string studentName, int[] studentMarks, int avgMarks)
        {
            this.studentName = studentName;
            this.studentMarks = studentMarks;
            this.avgMarks = avgMarks;
        }
        public void WriteData()
        {
            fs = new FileStream(@"/Users/swapnilnawale/Desktop/stud.dat", FileMode.Append, FileAccess.Write);
            BinaryWriter bw = new BinaryWriter(fs);
            bw.Write(studentName);
            for(int i = 0; i<3;i++)
            {
                bw.Write(studentMarks[i]);
            }
            bw.Write(avgMarks);
            bw.Flush();
            bw.Close();
            fs.Close();
            numOfStudents++;
        }
        public void ReadData()
        {
            fs = new FileStream(@"/Users/swapnilnawale/Desktop/stud.dat", FileMode.Open, FileAccess.Read);
            BinaryReader br = new BinaryReader(fs);
            studentName = br.ReadString();
            for (int j = 0; j <= numOfStudents; j++)
            {
                Console.Write(studentName + "\t");
                for (int i = 0; i < 3; i++)
                {
                    studentMarks[i] = br.ReadInt32();
                    Console.Write(studentMarks[i] + "\t");
                }
                avgMarks = br.ReadInt32();
                Console.WriteLine(avgMarks);
            }
            br.Close();
            fs.Close();
        }
    }
    class Program
    {
        static void Main(string[] args)
        {
            string studentName;
            int[] studentMarks = new int[3];
            int i = 0, totMarks=0, avgMarks;
            string resp;
            BinaryTesting bt;
            do
            {
                i++;
                Console.Write("Enter Student {0} Name: ", i);
                studentName = Console.ReadLine();
                
                for(int j = 0; j<3;j++)
                {
                    Console.Write("Enter Student {0} Subject {1} Marks: ", i, (j+1));
                    studentMarks[j]=Convert.ToInt32(Console.ReadLine());
                    totMarks += studentMarks[j];
                }
                avgMarks = totMarks / 3;
                bt = new BinaryTesting(studentName, studentMarks, avgMarks);
                bt.WriteData();
                Console.WriteLine("Press Y to continue");
                resp = Console.ReadLine();
            } while (resp == "Y" || resp == "y");
            bt.ReadData();
        }
    }
}

标签: c#filestreambinaryreaderbinarywriter

解决方案


推荐阅读