1、如下为事例代码:
其中一定要注意的事编码规则那个地方,如果文档中有汉字,没有选择正确的编码规则,那么读取的信息,汉字是乱码。
Encoding.Default,指默认的编码规则,可改变点后面的规则
一般推荐:GB2312
StreamReader sr=new StreamReader(fs,System.Text.Encoding.GetEncoding("GB2312"));
首先添加引用:
然后代码:
Stream myStream = null;
OpenFileDialog openFileDialog1 = new OpenFileDialog();
//指定路径
openFileDialog1.InitialDirectory = @"D:\";
//可选的文件类型
openFileDialog1.Filter = "ext files (*.txt)|*.txt";
//如果有多个可选文件类型,默认是第几个,从1开始。
openFileDialog1.FilterIndex = 1;
openFileDialog1.RestoreDirectory = true;
if (openFileDialog1.ShowDialog() == System.Windows.Forms.DialogResult.OK)
{
try
{
//可通过string path = windowsfile.FileName来获取打开的文档路径
if ((myStream = openFileDialog1.OpenFile()) != null)
{
//xaml_text是控件名
xaml_text.Text = string.Empty;
//编码规则
StreamReader st = new StreamReader(openFileDialog1.FileName, Encoding.Default);
string str = st.ReadLine();
while (str != null)
{
xaml_text.AppendText(str);
xaml_text.AppendText("\n");
str = st.ReadLine();
}
}
}
catch (Exception ex)
{
System.Windows.MessageBox.Show("打开文件出错:" + ex.Message);
}
}
2、保存文档
SaveFileDialog saveFileDialog1 = new SaveFileDialog();
saveFileDialog1.InitialDirectory = "d:\\";
saveFileDialog1.Filter = "ext files (*.txt)|*.txt";
saveFileDialog1.FilterIndex = 1;
saveFileDialog1.RestoreDirectory = true;
DialogResult dr = saveFileDialog1.ShowDialog();
if (dr == DialogResult.OK && saveFileDialog1.FileName.Length > 0)
{
//wpftext是控件名
FileStream fs = new FileStream(saveFileDialog1.FileName, FileMode.Create);// FileMode.Append不覆盖上一次写入的内容
StreamWriter sw = new StreamWriter(fs);
//开始写入
sw.Write(wpftext.Text);
//清空缓冲区
sw.Flush();
//关闭流
sw.Close();
fs.Close();
System.Windows.MessageBox.Show("存储文件成功!", "保存文件");
}
3、一般写入
如果要写入的内容不是很多,可以使用File.WriteAllText方法来一次将内容全部写如文件。
如果要将一个字符串的内容写入文件,可以用File.WriteAllText(FilePath)
或指定编码方式 File.WriteAllText(FilePath, Encoding)方法
string str1 = "Good Morning!";
File.WriteAllText(@"c:\temp\test\a.txt", str1);
// 也可以指定编码方式
File.WriteAllText(@"c:\temp\test\a.txt", str1, Encoding.ASCII);
如果有一个字符串数组,要把数组的每一个元素作为一行写入文件中,可以用File.WriteAllLines方法
string[] strs = { "Good Morning!","Good Afternoon!","Good Evening!"};
File.WriteAllLines(@"c:\temp\a.txt", strs);
// 也可以指定编码方式
File.WriteAllLines(@"c:\temp\a.txt", strs, Encoding.ASCII);
使用File.WriteAllText或File.WriteAllLines方法时,
如果指定的文件路径不存在,会创建一个新文件;如果文件已经存在,则会覆盖原文件
方法1
public void Write()
{
FileStream fs = new FileStream("E:\\ak.txt", FileMode.Create);
//获得字节数组
byte[] data = System.Text.Encoding.Default.GetBytes("Hello World!");
//开始写入
fs.Write(data, 0, data.Length);
//清空缓冲区、关闭流
fs.Flush();
fs.Close();
}
方法二
public void Write(string path)
{
FileStream fs = new FileStream(path, FileMode.Create);
StreamWriter sw = new StreamWriter(fs);
//开始写入
sw.Write("Hello World!!!!");
//清空缓冲区
sw.Flush();
//关闭流
sw.Close();
fs.Close();
}
4、其它情况
当要写入的内容比较多时,同样也要使用流(Stream)的方式写入
.Net为我们封装了StreamWriter类,它以一种特定的编码向字节流中写入字符。StreamWriter类的方法同样也不是静态方法,所以要使用该类写入文件首先要实例化该类,实例化StreamWriter类同样有很多方式:
// 如果文件不存在,创建文件; 如果存在,覆盖文件
StreamWriter sW1 = new StreamWriter(@"c:\temp\a.txt");
// 也可以指定编码方式, true 是 Appendtext, false 为覆盖原文件
StreamWriter sW2 = new StreamWriter(@"c:\temp\a.txt", true, Encoding.UTF8);
// FileMode.CreateNew: 如果文件不存在,创建文件;如果文件已经存在,抛出异常
FileStream fS = new FileStream(@"C:\temp\a.txt", FileMode.CreateNew, FileAccess.Write, FileShare.Read);
StreamWriter sW3 = new StreamWriter(fS);
StreamWriter sW4 = new StreamWriter(fS, Encoding.UTF8);
// 如果文件不存在,创建文件; 如果存在,覆盖文件
FileInfo myFile = new FileInfo(@"C:\temp\a.txt");
StreamWriter sW5 = myFile.CreateText();
//初始化完成后,可以用StreamWriter对象一次写入一行,一个字符,一个字符数组,甚至一个字符数组的一部分
// 写一个字符
sw.Write('a');
// 写一个字符数组
char[] charArray = new char[100];
sw.Write(charArray);
// 写一个字符数组的一部分(10~15)
sw.Write(charArray, 10, 15);
同样,StreamWriter对象使用完后,不要忘记关闭。
sW.Close();