我的记事本 第一讲:文件的打开与关闭
C#操作文件步骤:
1. 创建文件流对象
2. 创建读写器对象
3. 读写文件
4. 关闭读写器
5. 关闭文件流
l 打开文件
private
void tsmiOpen_Click(object sender, EventArgs e) {
OpenFileDialog dialog = new OpenFileDialog();
dialog.Filter = "RTF|*.rtf|
文本文件
|*.txt|
所有文件
|*.*"
;
//
显示打开文件对话框,并判断是否点击了
"
打开
"
按钮
if (dialog.ShowDialog() == DialogResult.OK) {
//
读取文件内容
ReadFile(dialog.FileName);
}
}
private
void ReadFile(string filename) {
FileStream fs = null;
try {
//
创建文件流
fs = new FileStream(filename, FileMode.Open);
//
创建读取器
StreamReader sr = new StreamReader(fs);
if (filename.LastIndexOf(".") != -1 &&
//rtf
格式文件,设置空间
RTF
属性
filename.Substring(filename.LastIndexOf(".") + 1).ToLower() == "rtf") {
rtfContent.Rtf = sr.ReadToEnd();
} else {
rtfContent.Text = sr.ReadToEnd();
}
//
关闭读取器
sr.Close();
} catch (Exception ex) {
MessageBox.Show(ex.Message);
} finally {
//
关闭文件流
if (fs != null) fs.Close();
}
}
l 保存文件
private
void tsmiSave_Click(object sender, EventArgs e) {
SaveFileDialog dialog = new SaveFileDialog();
dialog.Filter = "
文本文件
|*.txt|RTF|*.rtf|
所有文件
|*.*"
;
if (dialog.ShowDialog() == DialogResult.OK) {
WriteFile(dialog.FileName);
}
}
private
void WriteFile(string filename) {
FileStream fs = null;
try {
fs = new FileStream(filename, FileMode.Create);
StreamWriter sw = new StreamWriter(fs);
if (filename.LastIndexOf(".") != -1 &&
filename.Substring(filename.LastIndexOf(".") + 1).ToLower() == "rtf") {
sw.Write(rtfContent.Rtf);
} else {
sw.Write(rtfContent.Text);
}
sw.Close();
MessageBox.Show("
文件保存成功!
"
);
} catch (Exception ex) {
MessageBox.Show(ex.Message);
} finally {
if (fs != null) fs.Close();
}
}
文件操作时,可能会发生各种异常。比如:文件不存在、文件被占用、无权限等。所以采用对话框形式可以避免文件不存在,除此之外应采用异常处理,避免程序崩溃。
在创建FileStream时,要将声明放在try的外面,不然finally中不能得到fs对象(局部变量),在关闭时也应判断fs!=null,可能在打开时发生异常,文件未打开关闭,会发生异常。
那么我们在处理带格式的文本,比如RTF格式时,是根据文件的后缀去判断,如果是RTF文件,则将内容赋值给RichTextBox的Rtf属性。