C# 二進(jìn)制文件的讀寫
BinaryReader 和 BinaryWriter 類用于二進(jìn)制文件的讀寫。
BinaryReader 類
BinaryReader 類用于從文件讀取二進(jìn)制數(shù)據(jù)。一個 BinaryReader 對象通過向它的構(gòu)造函數(shù)傳遞 FileStream 對象而被創(chuàng)建。
下表列出了 BinaryReader 類中一些常用的方法:
序號 | 方法 & 描述 |
---|---|
1 | public override void Close() 關(guān)閉 BinaryReader 對象和基礎(chǔ)流。 |
2 | public virtual int Read() 從基礎(chǔ)流中讀取字符,并把流的當(dāng)前位置往前移。 |
3 | public virtual bool ReadBoolean() 從當(dāng)前流中讀取一個布爾值,并把流的當(dāng)前位置往前移一個字節(jié)。 |
4 | public virtual byte ReadByte() 從當(dāng)前流中讀取下一個字節(jié),并把流的當(dāng)前位置往前移一個字節(jié)。 |
5 | public virtual byte[] ReadBytes(
int count
)
從當(dāng)前流中讀取指定數(shù)目的字節(jié)到一個字節(jié)數(shù)組中,并把流的當(dāng)前位置往前移指定數(shù)目的字節(jié)。 |
6 | public virtual char ReadChar() 從當(dāng)前流中讀取下一個字節(jié),并把流的當(dāng)前位置按照所使用的編碼和從流中讀取的指定的字符往前移。 |
7 | public virtual char[] ReadChars(
int count
) 從當(dāng)前流中讀取指定數(shù)目的字節(jié),在一個字符數(shù)組中返回?cái)?shù)組,并把流的當(dāng)前位置按照所使用的編碼和從流中讀取的指定的字符往前移。 |
8 | public virtual double ReadDouble() 從當(dāng)前流中讀取一個 8 字節(jié)浮點(diǎn)值,并把流的當(dāng)前位置往前移八個字節(jié)。 |
9 | public virtual int ReadInt32() 從當(dāng)前流中讀取一個 4 字節(jié)有符號整數(shù),并把流的當(dāng)前位置往前移四個字節(jié)。 |
10 | public virtual string ReadString()
從當(dāng)前流中讀取一個字符串。字符串以長度作為前綴,同時(shí)編碼為一個七位的整數(shù)。 |
如需查看完整的方法列表,請?jiān)L問微軟的 C# 文檔。
BinaryWriter 類
BinaryWriter 類用于向文件寫入二進(jìn)制數(shù)據(jù)。一個 BinaryWriter 對象通過向它的構(gòu)造函數(shù)傳遞 FileStream 對象而被創(chuàng)建。
下表列出了 BinaryWriter 類中一些常用的方法:
序號 | 方法 & 描述 |
---|---|
1 | public override void Close() 關(guān)閉 BinaryWriter 對象和基礎(chǔ)流。 |
2 | public virtual void Flush() 清理當(dāng)前編寫器的所有緩沖區(qū),使得所有緩沖數(shù)據(jù)寫入基礎(chǔ)設(shè)備。 |
3 | public virtual long Seek(
int offset,
SeekOrigin origin
)
設(shè)置當(dāng)前流內(nèi)的位置。 |
4 | public virtual void Write(
bool value
)
把一個單字節(jié)的布爾值寫入到當(dāng)前流中,0 表示 false,1 表示 true。 |
5 | public virtual void Write(
byte value
)
把一個無符號字節(jié)寫入到當(dāng)前流中,并把流的位置往前移一個字節(jié)。 |
6 | public virtual void Write(
byte[] buffer
)
把一個字節(jié)數(shù)組寫入到基礎(chǔ)流中。 |
7 | public virtual void Write(
char ch
)
把一個 Unicode 字符寫入到當(dāng)前流中,并把流的當(dāng)前位置按照所使用的編碼和要寫入到流中的指定的字符往前移。 |
8 | public virtual void Write(
char[] chars
)
把一個字符數(shù)組寫入到當(dāng)前流中,并把流的當(dāng)前位置按照所使用的編碼和要寫入到流中的指定的字符往前移。 |
9 | public virtual void Write(
double value
)
把一個 8 字節(jié)浮點(diǎn)值寫入到當(dāng)前流中,并把流位置往前移八個字節(jié)。 |
10 | public virtual void Write(
int value
)
把一個 4 字節(jié)有符號整數(shù)寫入到當(dāng)前流中,并把流位置往前移四個字節(jié)。 |
11 | public virtual void Write(
string value
)
把一個以長度為前綴的字符串寫入到 BinaryWriter 的當(dāng)前編碼的流中,并把流的當(dāng)前位置按照所使用的編碼和要寫入到流中的指定的字符往前移。 |
如需查看完整的方法列表,請?jiān)L問微軟的 C# 文檔。
實(shí)例
下面的實(shí)例演示了讀取和寫入二進(jìn)制數(shù)據(jù):
using System; using System.IO; namespace BinaryFileApplication { class Program { static void Main(string[] args) { BinaryWriter bw; BinaryReader br; int i = 25; double d = 3.14157; bool b = true; string s = "I am happy"; // 創(chuàng)建文件 try { bw = new BinaryWriter(new FileStream("mydata", FileMode.Create)); } catch (IOException e) { Console.WriteLine(e.Message + "\n Cannot create file."); return; } // 寫入文件 try { bw.Write(i); bw.Write(d); bw.Write(b); bw.Write(s); } catch (IOException e) { Console.WriteLine(e.Message + "\n Cannot write to file."); return; } bw.Close(); // 讀取文件 try { br = new BinaryReader(new FileStream("mydata", FileMode.Open)); } catch (IOException e) { Console.WriteLine(e.Message + "\n Cannot open file."); return; } try { i = br.ReadInt32(); Console.WriteLine("Integer data: {0}", i); d = br.ReadDouble(); Console.WriteLine("Double data: {0}", d); b = br.ReadBoolean(); Console.WriteLine("Boolean data: {0}", b); s = br.ReadString(); Console.WriteLine("String data: {0}", s); } catch (IOException e) { Console.WriteLine(e.Message + "\n Cannot read from file."); return; } br.Close(); Console.ReadKey(); } } }
當(dāng)上面的代碼被編譯和執(zhí)行時(shí),它會產(chǎn)生下列結(jié)果:
Integer data: 25 Double data: 3.14157 Boolean data: True String data: I am happy
更多建議: