1. 程式人生 > >C#:檔案IO操作 FileStream的用法 及 StreamReader 和 StreamWriter的用法

C#:檔案IO操作 FileStream的用法 及 StreamReader 和 StreamWriter的用法

1. FileStream 用法程式碼

static void Main(string[] args) {

            //memory : 記憶體
            //Binary : 二進位制

            String path = @"F:\ly\test2018_12_10.txt";
            //FileMode.Create  如果檔案不存在,則重新建立,否則覆蓋它
            //FileMode.Append  如果檔案已存在,則不覆蓋,而是從檔案末尾新增操作,否則建立一個檔案
            //FileMode.OpenOrCrate   如果檔案存在,則開啟,不存在則建立一個
            FileStream fs = new FileStream(path,FileMode.Create,FileAccess.ReadWrite);
            //注意點:在txt中換行必須要2個字元  \r\n
            String s = "123 qwer <>? \r\n 你好啊!"; //23個位元組
            byte[] bs = System.Text.Encoding.Default.GetBytes(s); //Stirng 轉 byte[]
            fs.Write(bs,0,bs.Length);
            //注意點:close()語句必須要有,不然所有的流操作都無效
            fs.Close();
            //追加內容 只能以寫的方式
            fs = new FileStream(path,FileMode.Append,FileAccess.Write);
            fs.Write(bs,0,bs.Length);
            fs.Close();

            //讀取內容只能以讀的方式
            fs = new FileStream(path,FileMode.OpenOrCreate,FileAccess.Read);
            byte[] bts = new byte[1024];
            //1024只是請求的位元組數,reallength是真正讀取的位元組數,用bts儲存讀取的內容
            int reallength = fs.Read(bts,0,1024);
            Console.WriteLine(fs.Length+"   "+bts.Length +"   "+reallength);//46  1024   46
            String reads = System.Text.Encoding.Default.GetString(bts); //byte[] 轉 String
            Console.WriteLine(reads);
            fs.Close();

            //將讀取的內容再寫入檔案
            fs = new FileStream(path,FileMode.Append,FileAccess.Write);
            //fs.Write(bts,0,1024);  不用這句,雖然bts的長度有1024,但是有效值的長度只有 reallength
            fs.Write(bts,0,reallength);
            fs.Close();



            Console.Read();
        }

2.總結

我們一開始寫入了23個位元組,後又追加了23個位元組,最後又追加了46個位元組,所以執行程式碼後,輸出檔案 應該有92個位元組。

檔案詳細情況如下:

 

3. StreamReader 和 StreamWriter的用法程式碼:

FileStream是針對於位元組操作的,而這兩個可以針對於一行字串操作,操作比較方便。

static void Main(string[] args) {

            String path = @"F:\ly\test2018_12_10.txt";

            //第二個引數為true表名為追加內容,為false或不寫則為覆蓋檔案內容
            //下面兩行程式碼會清除檔案內容
            //StreamWriter writer = new StreamWriter(path);
            //writer.Close();
            //這兩行程式碼不會清除檔案內容
            //StreamWriter writer = new StreamWriter(path,true);
            //writer.Close();
            ////必須選定預設編碼方式,不然寫入檔案的字串亂碼
            StreamWriter writer = new StreamWriter(path, true, Encoding.Default);
            writer.WriteLine("這是第一行!");
            writer.WriteLine("這是第二行!");
            writer.Close();

            
            //StreamReader reader = new StreamReader(path); //必須選定預設編碼方式,不然打印出來的字串亂碼
            StreamReader reader = new StreamReader(path, Encoding.Default);

            String s = "";
            while ((s = reader.ReadLine()) != null) {
                Console.WriteLine(s);
            }
            reader.Close();
            



            Console.Read();
        }

一開始檔案的內容是:

helloWord

執行程式碼之後,內容為:

hello world這是第一行!
這是第二行!