c# - 为什么我无法取回使用 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();
}
}
}
解决方案
推荐阅读
- excel - EXCEL 转 CSV (VBA)
- javascript - JavaScript 中的 this 关键字:请问为什么警报会说 hello 521
- git - 对 Head ref 和 git rebase --interactive 的组合感到困惑
- asp.net - 在 SignalR 协商阶段发生 CORS 错误
- c++ - 无法让 MouseInput 点击
- steam - 我可以通过用户登录获取 Steam 个人资料网址吗?
- here-api - Here Api TPEGOpenLRBase64 Code 有解码器吗?
- python - 为什么 pandas df.add_suffix() 不能与 for-loop 一起使用
- php - 将FFmpeg作为php中的进程运行时出现超时错误
- java - 如何注入 SDK 接口的新实现?