当然对于一些大文件的读写还是建议用回传统的文件输入输出流,但是对于一些简单的小文件输入输出直接利用ReadAllText与WriteAllText能够省下不少的代码。你不用判断这个文件是否存在,不用在输入输出完毕处理文件输入输出流,一句代码就能够完事。下面用一个小程序来说明这个例子。
如下图,在FileReadWrite.exe中有一个文本框,用户可以在其中输入内容,如果输入内容有所改变,则在关闭时提醒用户是否保存。
最终的文件载体是我们自己定义的,在与FileReadWrite.exe同一个目录的a.ooo。
首先,先在对Form1窗体进行如下的布局:
与《【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;
}
}
}