当用户在程序中建立一个文件,但是尚未保存和赋予名称时,所建立的文件是被保存在内存中的,显然这样很危险。如果由于突然死机或者其它原因造成了程序在未保存之前就关闭了,那么损失将非常严重。如果在文件建立时同时就在磁盘中存储数据,将不会造成这样的损失。这时需要一个临时文件来保存数据。本例将介绍如何建立临时文件来存储数据,其结果如下图所示:
1、技术要点
(1)用path类提供的静态方法GetTempFileName能够获取和创建一个临时文件。该方法和语法格式如下:
Public static string GetTempFileName()
返回值:临时文件完全路径。
(2)C# 文件类中 File ,FileInfo 类的主要区别
System.IO命名空间中提供的文件操作类有File和FileInfo,这两个类的功能基本相同,只是File是静态类,其中所有方法都是静态的,可以通过类名直接调用,不需要实例化。而FileInfo是普通类,只有实例化对象后才可以调用其中的方法。
比如:复制一个文件到另外一个地方:
File.Copy(filePath,newFilePath)就可以。
如果用FileInfo,可能需要:
FileInof fi = new FileInfo();
fi.CopyTo(newFilePath);
2、界面设计
(1)创建一个项目,将其命名为GetTempFile,默认窗体为Form1.
(2)在Form1窗体中添加2个Button控件分别用于保存文件和关闭窗体,添加1个RichTextBox控件用于输入内容,
(3)添加1个TextBox控件用于显示文件路径,并设置属性“Eabled”为false,即不可编辑模式。
(4)添加1个timer控件,作用设置每隔一段时间保存一下,设置属性“Interval”间隔时间为30000,30秒。
3、代码编辑
(1)声明变量:
public partial class Form1 : Form
{
string TempFileName = Path.GetTempFileName();//声明一个临时文件路径名
string OfficialFileName = ""; //声明一个正式文件名为空
(2)保存按钮事件:
private void btnSave_Click(object sender, EventArgs e)
{
textBox1.Text = TempFileName;
FileInfo fin = new FileInfo(textBox1.Text);//创建一个文件
StreamWriter sw = fin.CreateText(); //fileinfo.CreateText(),创建写入新文本文件的 StreamWriter
sw.Write(richTextBox1.Text); //将richTextBox1的内容写入sw中
sw.Close(); //关闭
}
启动运行程序,输入内容“123456”,选择【保存】,临时文件保存路径C:\Users\Administrator\AppData\Local\Temp
(3)关闭按钮事件:
private void btnClose_Click(object sender, EventArgs e)
{
if (File.Exists(TempFileName))
{
File.Delete(TempFileName);//如果临时文件存在,则删除临时文件
}
Close(); //如果临时文件不存在,直接关闭窗口
}
(4)计时器事件:
private void timer1_Tick(object sender, EventArgs e)
{
textBox1.Text = TempFileName;
FileInfo fin = new FileInfo(textBox1.Text);
StreamWriter sw = fin.CreateText(); //将文本写入文件
sw.Write(richTextBox1.Text); //写入信息
sw.Close();
}
4、扩展:保存为正式文件,则将保存按钮事件改为如下所示:
private void btnSave_Click(object sender, EventArgs e)
{
textBox1.Text = TempFileName;
FileInfo fin = new FileInfo(textBox1.Text);//创建一个文件
StreamWriter sw = fin.CreateText(); //fileinfo.CreateText(),创建写入新文本文件的 StreamWriter
sw.Write(richTextBox1.Text); //将richTextBox1的内容写入sw中
sw.Close(); //关闭
if (OfficialFileName == "") //将临时文件保存到正式文件中
{
SaveFileDialog sdb = new SaveFileDialog();
sdb.Filter = "文本文件(*.txt)|*.txt";
sdb.FileName = "我的文本文件";
if (sdb.ShowDialog() == DialogResult.OK)
{
File.Copy(TempFileName, sdb.FileName); //将临时文件保存到正式文件中
OfficialFileName = sdb.FileName;
}
}
else
{
File.Copy(TempFileName, OfficialFileName);
}
}