c# - 将多个用户输入存储到 .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();
}
}
}
谢谢
解决方案
您快到了,但代码存在一些问题,可以稍微整理一下。
- 您正在创建 3 个文件:outFile.bin、outText.txt 和 test.txt。没有数据/文本写入
outFile.txt
,它在几行后打开然后关闭。往里看test.txt
,它会有最后的学生数据(见下一点)。 - 您正在循环中写入文件,这会覆盖数据,因此只有最后一个用户数据被写入文件。使用
outputFile = new StreamWriter("test.txt", true)
此重载StreamWriter
将允许您选择附加到文件(true)或覆盖(false)。 - 我建议在
using()
写入文件或任何实现IDisposable
. 例如,在打开 StreamWriter 时,您可以执行using (var outputFile = new StreamWriter("test.txt", true)) { }
. 这确保了流写入器被垃圾收集器关闭和处理,(例如,您没有关闭dataOutput
文件流,如果它在一个using(){}
块中,它将自动为您处理) - 这可以重构为只使用一个
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);
}
推荐阅读
- android - Firebase 数据库 - Firebase 数据库运行循环 (19.3.0) 中未捕获的异常
- python - 估计器管道的参数 n_neighbors 无效
- python - FLASK_SQLAlchemy :有没有办法与自身建立表关系?
- php - 如何防止 DOMDocument 包装结果
标签?
- javascript - Ag-grid - 具有可扩展高度单元会导致渲染问题
- mongodb - 使用 MongoDB Atlas 的烧瓶用户
- reactjs - 如何将道具从功能组件传递到类组件
- javascript - javascript在动态生成的元素中设置onclick
- android - 需要帮助使用 Google Oauth 和 Android 配置 Django Rest API
- deep-learning - 关于过拟合模型