Хранение нескольких пользовательских входов в.txt и.bin С#

128
14

У меня есть часть кода для моего класса, где я ввожу значения, которые записываются в.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();
}
}

}

Спасибо

спросил(а) 2018-12-05T01:36:00+03:00 2 года, 2 месяца назад
1
Решение
121

Вы почти там, но есть несколько проблем с кодом, и его можно немного подобрать.

Вы создаете 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 для каждого раза, когда вы пишете файл.

Из Документов класс BinaryWriter

Записывает примитивные типы в двоичном виде в поток и поддерживает запись строк в определенной кодировке.

Таким образом, двоичный писатель пишет в двоичном формате, но данные, которые он пишет, являются строками. Он может легко писать 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);
}

ответил(а) 2018-12-05T02:26:00+03:00 2 года, 2 месяца назад
Ваш ответ
Введите минимум 50 символов
Чтобы , пожалуйста,
Выберите тему жалобы:

Другая проблема