c# - 轮询申请 : StreamWriter not writing to file

标签 c# streamwriter

我正在为学校编写一个程序,所以我并不完全希望有人为我修复它,但如果有人能指出他们看到错误的地方,那将非常有帮助! :D

该程序应该在文本框中输入一系列数字,用户在输入每个整数后按回车键,当他们按回车键时,数字会写入文件,因此每个数字都用逗号分隔. 当用户点击完成按钮时,按钮和文本框被禁用,然后一个新按钮和一个列表框被启用。用户可以选择结果按钮以在列表框中查看在文本框中输入的数字的频率。

我觉得除了它实际上没有写入文件外,大部分都工作正常。这只是我的第一年,所以我在这方面还很陌生,但从我掌握的信息来看,一切看起来都是正确的。

如果有人能再次指出我应该在哪里寻找错误,我将非常感激!这是我的代码:

 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();
        }
    }
}

最佳答案

StreamWriter(和 StreamReader)被缓冲。 IO 操作通常比在内存中工作慢得多,因此文件通常以 block 的形式读取和写入。

如果您只使用 StreamWriter 写入少量内容,您将获得此处所见的行为。

您写入的信息已写入 StreamWriters 缓冲区,它不会出现在磁盘上,直到您刷新 缓冲区或关闭流。

关于c# - 轮询申请 : StreamWriter not writing to file,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29673885/

相关文章:

c# - 在 C# 中读取和写入非常大的文本文件

c# - 在 C# 中将文本写入新文件时遇到困难,根路径错误,访问被拒绝

c# - 为什么 StreamWriter 会覆盖我的文件?

c# - 读取和写入文本文件时出现意外输出

c# - 通过用户输入过滤 ObservableCollection

c# - 函数来获取任何方法的名称?

c# - 与 ASP.net 5 MVC 6 中的错误处理混淆

c# - 正则表达式匹配一组字母数字后跟一组空格,使字符总数固定

c# - 为什么写入文件比附加字符串更快?

c# - 运算符 '+' 不能应用于类型 "string"和 "method group"的操作数