C# byte及char FileStream 與StreamReader的區別

來源:互聯網
上載者:User

FileStream對象表示在磁碟或網路路徑上指向檔案的流。這個類提供了在檔案中讀寫位元組的方法,但經常使用StreamReader或StreamWriter執行這些功能。這是因為FileStream類操作的是位元組和位元組數組,而Stream類操作的是字元資料。這是這兩種類的一個重要區別,如果你是準備讀取byte資料的話,用StreamReader讀取然後用System.Text.Encoding.Default.GetBytes轉化的話,如下,則可能出現資料丟失的情況,如byte資料的個數不對等。因此操作byte資料時要用FileStream。
string textContent = fileStream.ReadToEnd();byte[] bytes = System.Text.Encoding.Default.GetBytes(textContent);
字元資料便於使用,但是有些操作,比如隨機檔案訪問(訪問檔案中間某點的資料),就必須由FileStream對象執行.
其中建立FileStream對象最簡單的建構函式如下:

1 FileStream file = newFileStream(fileName,FileMode.Member);
2 FileStream file = newFileStream(fileName, FileMode.Member, FileAccess.Member);

而FileAccess的成員:

 

成員

說明

Read

開啟檔案,用於唯讀

Write

開啟檔案,用於唯寫

ReadWrite

開啟檔案,用於讀寫

對檔案進行不是FileAccess枚舉成員指定的操作會導致拋出異常。此屬性的作用是,基於使用者的身分識別驗證層級改變使用者對檔案的存取權限。

在FileStream建構函式不使用FileAccess枚舉參數的版本中,使用預設值FileAccess. ReadWrite。

FileMode枚舉成員,使用每個值會發生什麼,取決於指定的檔案名稱是否表示已有的檔案。

成員

檔案存在

檔案不存在

Append

開啟檔案,流指向檔案的末尾,只能與枚舉FileAccess.Write聯合使用

建立一個新檔案。只能與枚舉FileAccess.Write聯合使用

Create

刪除該檔案,然後建立新檔案

建立新檔案

CreateNew

拋出異常

建立新檔案

Open

開啟現有的檔案,流指向檔案的開頭

拋出異常

OpenOrCreate

開啟檔案,流指向檔案的開頭

建立新檔案

Truncate

開啟現有檔案,清除其內容。流指向檔案的開頭,保留檔案的初始建立日期

拋出異常

 

FileStream類操作的是位元組和位元組數組,而Stream類操作的是字元資料
StreamWriter
允許將字元和字串寫入檔案,它處理底層的轉換,向FileStream對象寫入資料。StreamReader也類似。
執行個體:

1 using System;
2 usingSystem.Data;
3 using System.IO;
4 usingSystem.Text;
5
6 /**////<summary>
7 /// Summary description for FileReadAndWrite
8 ///</summary>
9 publicclassFileReadAndWrite
10 {
11 publicFileReadAndWrite()
12 {
13 //
14 // TODO: Add constructor logic here
15 //
16 }
17 /**////<summary>
18 ///用FileStream寫檔案
19 ///</summary>
20 ///<param name="str"></param>
21 ///<returns></returns>
22 publicvoidFileStreamWriteFile(stringstr)
23 {
24 byte[] byData;
25 char[] charData;
26 try
27 {
28 FileStreamnFile = newFileStream("love.txt", FileMode.Create);
29 //獲得字元數組
30 charData = str.ToCharArray();
31 //初始化位元組數組
32 byData = newbyte[charData.Length];
33 //將字元數群組轉換為正確的位元組格式
34 Encoder enc = Encoding.UTF8.GetEncoder();
35 enc.GetBytes(charData, 0, charData.Length,byData,0,true);
36 nFile.Seek(0, SeekOrigin.Begin);
37 nFile.Write(byData, 0, byData.Length);
38 }
39 catch (Exception ex)
40 {
41 throw ex;
42 }
43 }
44 /**////<summary>
45 ///FileStream讀取檔案
46 ///</summary>
47 ///<param name="filePath"></param>
48 ///<returns></returns>
49 publicstringFileStreamReadFile(stringfilePath)
50 {
51 byte[] data = newbyte[100];
52 char[] charData = newchar[100];
53 try
54 {
55 FileStream file = newFileStream(filePath, FileMode.Open);
56 //檔案指標指向0位置
57 file.Seek(0, SeekOrigin.Begin);
58 //讀入兩百個位元組
59 file.Read(data, 0, 200);
60 //提取位元組數組
61 Decoder dec = Encoding.UTF8.GetDecoder();
62 dec.GetChars(data, 0, data.Length, charData, 0);
63 }
64 catch (Exception ex)
65 {
66 throw ex;
67 }
68 returnConvert.ToString(charData);
69 }
70 /**////<summary>
71 ///StreamWriter寫檔案
72 ///</summary>
73 publicvoidStreamWriterWriteFile()
74 {
75 try
76 {
77 FileStreamnFile = newFileStream("love.txt", FileMode.CreateNew);
78 StreamWriter writer = newStreamWriter(nFile);
79
80 writer.WriteLine("I love You!");
81 writer.WriteLine("Do you love me!");
82 writer.Close();
83 }
84 catch
85 { }
86 }
87 /**////<summary>
88 ///StreamReader讀取檔案
89 ///</summary>
90 ///<returns></returns>
91 publicstringStreamReaderReadFile()
92 {
93 stringstr="";
94 try
95 {
96 FileStream file = newFileStream("love.txt", FileMode.Open);
97 StreamReadersr = newStreamReader(file);
98 while (sr.ReadLine()!=null)
99 {
100 str += sr.ReadLine();
101 }
102 //或者str = sr.ReadToEnd();
103 sr.Close();
104 }
105 catch
106 { }
107 returnstr;
108 }
109 }
110

 

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.