Sto scrivendo un programma per la scuola, quindi non voglio assolutamente che qualcuno lo aggiusti per me, ma se qualcuno potrebbe indicare dove vedono l'errore, sarebbe davvero utile ! : DApplicazione sondaggio: StreamWriter non scrive nel file
Il programma dovrebbe contenere una serie di numeri in una casella di testo, con l'utente che preme invio dopo ogni voce intera, quando premono invio, il numero scrive in un file, in modo che ogni numero sia separato da una virgola. Quando l'utente preme il pulsante Fine, il pulsante e la casella di testo diventano disabilitati, quindi un nuovo pulsante e una casella di riepilogo diventano abilitati. L'utente può selezionare il pulsante risultati per visualizzare nella casella di riepilogo la frequenza dei numeri inseriti nella casella di testo.
Ritengo che la maggior parte funzioni correttamente, tranne che in realtà non scrive sul file. Questo è solo il mio primo anno quindi sono abbastanza nuovo in questo, ma da quali informazioni ho tutto sembra giusto.
Se qualcuno potrebbe indicare dove dovrei cercare un errore, di nuovo, lo apprezzerei davvero! Ecco il mio codice:
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();
}
}
}
prova ad aggiungere 'writer.Flush()' dopo aver scritto allo stream –
anche 'writer.Close()' dato che non stai usando il blocco 'using' per chiudere il flusso I/O per evitare' File già in usare' alla prossima chiamata. – Franck
È inoltre possibile impostare AutoFlush = true. –