C#编程,按行读取txt文档,保存文档的一种方法。

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(); 

 

 

  • 1
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值