Ich schreibe ein Programm für die Schule, so dass ich nicht will, dass jemand es für mich zu beheben, aber wenn jemand könnte zeigen, wo sie den Fehler sehen, das wäre wirklich hilfreich ! : DUmfrage-Anwendung: StreamWriter nicht in Datei schreiben
Das Programm soll eine Reihe von Zahlen in einem Textfeld aufnehmen, mit dem Benutzer nach jedem Integer-Eintrag Enter drücken, wenn sie Enter drücken, schreibt die Zahl in eine Datei, so dass jede Nummer getrennt ist durch ein Komma. Wenn der Benutzer auf die Schaltfläche Fertig klickt, werden die Schaltfläche und das Textfeld deaktiviert, und eine neue Schaltfläche und ein Listenfeld werden aktiviert. Der Benutzer kann die Schaltfläche "Ergebnisse" auswählen, um im Listenfeld die Häufigkeit der Zahlen zu sehen, die in das Textfeld eingegeben wurden.
Ich fühle, dass das meiste davon richtig funktioniert, außer dass es nicht wirklich in die Datei schreibt. Dies ist nur mein erstes Jahr, also bin ich ziemlich neu dabei, aber nach welchen Informationen ich alles richtig sehe.
Wenn jemand darauf hinweisen könnte, wo ich nach einem Fehler suchen sollte, würde ich es sehr schätzen! Hier ist mein Code:
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
using System.IO;
namespace StudentPoll1
{
public partial class Form1 : Form
{
const string FILENAME = "numbers.txt";
FileStream file = new FileStream(FILENAME,
FileMode.Create, FileAccess.ReadWrite);
public Form1()
{
InitializeComponent();
btnResult.Enabled = false;
}
private void tbInput_KeyDown(object sender, KeyEventArgs e)
{
const char DELIM = ',';
int input;
const int MIN = 1;
const int MAX = 10;
int.TryParse(tbInput.Text, out input);
if (e.KeyCode == Keys.Enter)
{
try
{
if (input < MIN || input > MAX)
{
MessageBox.Show("Please enter an integer between 1 and 10");
}
else
{
StreamWriter writer = new StreamWriter(file);
writer.WriteLine(input + DELIM + " ");
}
}
catch (IOException)
{
MessageBox.Show("Error with input");
}
finally
{
tbInput.Clear();
}
}
}
private void btnDone_Click(object sender, EventArgs e)
{
file.Close();
btnDone.Enabled = false;
btnResult.Enabled = true;
lbOutput.SelectionMode = SelectionMode.None;
}
private void btnResult_Click(object sender, EventArgs e)
{
int[] ratings = { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 };
int[] results = new int[10];
int entry;
const char DELIM = ',';
FileStream fs = new FileStream(FILENAME,
FileMode.Open, FileAccess.Read);
StreamReader reader = new StreamReader(fs);
string record;
string[] fields;
record = reader.ReadLine();
while (record != null)
{
fields = record.Split(DELIM);
entry = Convert.ToInt32(fields[0]);
foreach (int x in ratings)
{
if (entry == ratings[x])
{
++results[x];
}
}
}
for (int num = 0; num < ratings.Length; ++num)
{
lbOutput.Items.Add(ratings[num] + " " + results[num]);
}
fs.Close();
reader.Close();
}
}
}
versuchen, 'writer.Flush()' nach dem Schreiben in den Stream –
Auch 'writer.Close()' da Sie nicht mit dem 'using' Block zu schließen den I/O-Stream zu verhindern' Datei bereits in Verwenden Sie 'beim nächsten Anruf. – Franck
Sie können auch AutoFlush = true festlegen. –