1. 程式人生 > >【C#】txt的讀寫

【C#】txt的讀寫

這個程式和《【C#】XML讀寫與dataGridView的使用》(點選開啟連結)一個尿性,只是程式碼更加簡單,因為C#對txt的讀寫基本上和Java一樣,具體見《【Java】輸入與輸出與JDK1.5之後的新型字串StringBuilder》(點選開啟連結),直接一個FileStream與StreamReader/StreamWriter就足矣,但貌似自己還沒有寫過C#的檔案流,也就在這裡寫寫了。還是弄一個窗體程式,可以讀txt到TextBox,並且能將TextBox的內容寫入到檔案。


如果使用者一開始是沒有讀入txt的話,那就是直接建立一個新的檔案再寫入。


這個程式的編寫步驟如下:

一、場景佈置

場景佈置如下圖所示,在Form1中佈置2個Button+1個textbox


二、指令碼編寫

雙擊Button1與Button2分別賦予點選事件,編寫如下的程式碼:

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 txtRW
{
    public partial class Form1 : Form
    {
        string txt_FilePath = "";//用來記錄當前開啟檔案的路徑的  

        public Form1()
        {
            InitializeComponent();
        }

        private void button1_Click(object sender, EventArgs e)
        {
            OpenFileDialog openFileDialog1 = new System.Windows.Forms.OpenFileDialog();//一個開啟檔案的對話方塊  
            openFileDialog1.Filter = "文字檔案(*.txt)|*.txt";//設定允許開啟的副檔名  
            if (openFileDialog1.ShowDialog() == DialogResult.OK)//判斷是否選擇了檔案    
            {
                txt_FilePath = openFileDialog1.FileName;//開啟檔案的路徑
                textBox1.Text = "";//清空textBox1
                StreamReader streamReader = new StreamReader(txt_FilePath, Encoding.Default);//記錄使用者選擇的檔案路徑
                while (!streamReader.EndOfStream)
                {//如果這個還沒有讀到檔案尾
                    string line = streamReader.ReadLine();//就一行一行地讀
                    textBox1.Text += line + "\r\n";
                }
                streamReader.Close();//一定要關閉這個流,不然會和下面儲存檔案的流衝突
            }
            else
            {
                MessageBox.Show("請開啟txt檔案");
            }
        }

        private void button2_Click(object sender, EventArgs e)
        {
            FileStream fileStream = null;//根據不同情況使用不同的檔案指標
            if (txt_FilePath == "")//如果使用者沒讀取過檔案,那就獲取一個檔案路徑寫入
            {
                SaveFileDialog saveFileDialog1 = new System.Windows.Forms.SaveFileDialog();//開啟一個儲存對話方塊
                saveFileDialog1.Filter = "文字檔案(*.txt)|*.txt";//設定允許開啟的副檔名  
                if (saveFileDialog1.ShowDialog() == DialogResult.OK)//判斷是否選擇了一個檔案路徑  
                {
                    txt_FilePath = saveFileDialog1.FileName;//獲取儲存路徑
                    fileStream = new FileStream(txt_FilePath, FileMode.Create);//以建立的方式開啟這個檔案
                }
                else
                {
                    MessageBox.Show("請開啟txt檔案");
                }
            }
            else//如果使用者已經打開了檔案
            {
                fileStream = new FileStream(txt_FilePath, FileMode.Truncate);//以覆蓋寫入的方式開啟這個檔案
            }
            StreamWriter streamWriter = new StreamWriter(fileStream);
            streamWriter.Write(textBox1.Text);//開始寫入
            streamWriter.Flush();//清空緩衝區
            //關閉流
            streamWriter.Close();
            fileStream.Close();
            MessageBox.Show("寫入txt檔案成功!");
        }
    }
}

這裡值得注意主要就是FileStream與StreamReader/StreamWriter兩個流,對於StreamReader無須FileStream幫助,自己就能指明程式路徑讀取,StreamWriter由於寫入方式有覆蓋寫入、建立寫入和附加寫入的存在,因此需要藉助FileStream的幫助,如果希望是附加寫入的,FileStream的第二個引數請使用FileMode.Append