【C#】利用System.IO中的File类中的ReadAllText与WriteAllText输入输出小文件

当然对于一些大文件的读写还是建议用回传统的文件输入输出流,但是对于一些简单的小文件输入输出直接利用ReadAllText与WriteAllText能够省下不少的代码。你不用判断这个文件是否存在,不用在输入输出完毕处理文件输入输出流,一句代码就能够完事。下面用一个小程序来说明这个例子。

如下图,在FileReadWrite.exe中有一个文本框,用户可以在其中输入内容,如果输入内容有所改变,则在关闭时提醒用户是否保存。

最终的文件载体是我们自己定义的,在与FileReadWrite.exe同一个目录的a.ooo。

【C#】利用System.IO中的File类中的ReadAllText与WriteAllText输入输出小文件_第1张图片

首先,先在对Form1窗体进行如下的布局:

【C#】利用System.IO中的File类中的ReadAllText与WriteAllText输入输出小文件_第2张图片

与《【C#】简单窗体程序,判断是否闰年,禁止窗体调整大小,关闭窗体前的判断》(点击打开链接)一样将Form1的FormBorderStyle设置为FixedDialog此窗口不可以自由调整大小,同时将MaximizeBox设置为False禁用最大化按钮。

同时为Form1添加Load事件、FormClosing事件,用于窗体初始化时载入文件,关闭时候弹出对话框,询问用户是否保存文件。

之后为Button1、Button2两个按钮添加点击事件,同时为textBox1添加TextChanged事件,一旦用户改变textBox1的内容,则在关闭此窗体的时候弹出询问用户是否保存文件的对话框,同时为textBox1添加KeyDown事件,让用户可以在textBox1使用Ctrl+A全选。

之后修改Form1.cs如下:

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
using System.IO;

namespace FileReadWrite
{
    public partial class Form1 : Form
    {
        private string filepath = System.Environment.CurrentDirectory + "\\a.ooo";//取当前exe的目录下的a.ooo路径
        private bool text_change_flag = false;//记录用户是否改变textBox1的内容
        public Form1()
        {
            InitializeComponent();
            this.StartPosition = FormStartPosition.CenterScreen;//设置Form窗体初始化放在屏幕中间
        }

        //窗体关闭时
        private void Form1_FormClosing(object sender, FormClosingEventArgs e)
        {
            if (text_change_flag)//用户改变过textBox1的内容
            {
                DialogResult dialog_result = MessageBox.Show("是否保存?", this.Text, MessageBoxButtons.YesNoCancel);
                if (dialog_result == DialogResult.Yes)//用户确定保存之后
                {
                    File.WriteAllText(filepath, textBox1.Text);//写入文件
                    e.Cancel = false;//确定关闭  
                }
                else if (dialog_result == DialogResult.Cancel)
                {
                    e.Cancel = true;//取消关闭
                }
                else
                {
                    e.Cancel = false;//确定关闭  
                }
            }
            else
            {
                e.Cancel = false;//确定关闭  
            }
        }

        //窗体初始化时
        private void Form1_Load(object sender, EventArgs e)
        {
            if (File.Exists(filepath))//如果有这个文件
            {
                textBox1.Text += File.ReadAllText(filepath);//读入这个文件到textBox1
                text_change_flag = false;
            }
        }

        //保存按钮
        private void button1_Click(object sender, EventArgs e)
        {
            text_change_flag = false;
            File.WriteAllText(filepath, textBox1.Text);

        }

        //关闭按钮
        private void button2_Click(object sender, EventArgs e)
        {
            this.Close();
        }

        //如果用户按下Ctrl+A,则全选textBox1的内容
        private void textBox1_KeyDown(object sender, KeyEventArgs e)
        {
            if (e.KeyCode == Keys.A && e.Control)
            {
                textBox1.SelectAll();
            }
        }

        //一旦用户改变textBox1的内容
        private void textBox1_TextChanged(object sender, EventArgs e)
        {
            text_change_flag = true;
        }
    }
}


你可能感兴趣的:(C#,C#,文件,读写,窗体,事件)