C# 二進(jìn)制文件的讀寫(xiě)
C# 二進(jìn)制文件的讀寫(xiě)
BinaryReader 和 BinaryWriter 類用于二進(jìn)制文件的讀寫(xiě)。
BinaryReader 類
BinaryReader 類用于從文件讀取二進(jìn)制數(shù)據(jù)。一個(gè) BinaryReader 對(duì)象通過(guò)向它的構(gòu)造函數(shù)傳遞 FileStream 對(duì)象而被創(chuàng)建。
下表列出了 BinaryReader 類中一些常用的方法:
序號(hào) | 方法 & 描述 |
---|---|
1 | public override void Close()關(guān)閉 BinaryReader 對(duì)象和基礎(chǔ)流。 |
2 | public virtual int Read()從基礎(chǔ)流中讀取字符,并把流的當(dāng)前位置往前移。 |
3 | public virtual bool ReadBoolean()從當(dāng)前流中讀取一個(gè)布爾值,并把流的當(dāng)前位置往前移一個(gè)字節(jié)。 |
4 | public virtual byte ReadByte()從當(dāng)前流中讀取下一個(gè)字節(jié),并把流的當(dāng)前位置往前移一個(gè)字節(jié)。 |
5 | public virtual byte[] ReadBytes( int count ) 從當(dāng)前流中讀取指定數(shù)目的字節(jié)到一個(gè)字節(jié)數(shù)組中,并把流的當(dāng)前位置往前移指定數(shù)目的字節(jié)。 |
6 | public virtual char ReadChar()從當(dāng)前流中讀取下一個(gè)字節(jié),并把流的當(dāng)前位置按照所使用的編碼和從流中讀取的指定的字符往前移。 |
7 | public virtual char[] ReadChars( int count )從當(dāng)前流中讀取指定數(shù)目的字節(jié),在一個(gè)字符數(shù)組中返回?cái)?shù)組,并把流的當(dāng)前位置按照所使用的編碼和從流中讀取的指定的字符往前移。 |
8 | public virtual double ReadDouble()從當(dāng)前流中讀取一個(gè) 8 字節(jié)浮點(diǎn)值,并把流的當(dāng)前位置往前移八個(gè)字節(jié)。 |
9 | public virtual int ReadInt32()從當(dāng)前流中讀取一個(gè) 4 字節(jié)有符號(hào)整數(shù),并把流的當(dāng)前位置往前移四個(gè)字節(jié)。 |
10 | public virtual string ReadString() 從當(dāng)前流中讀取一個(gè)字符串。字符串以長(zhǎng)度作為前綴,同時(shí)編碼為一個(gè)七位的整數(shù)。 |
如需查看完整的方法列表,請(qǐng)?jiān)L問(wèn)微軟的 C# 文檔。
BinaryWriter 類
BinaryWriter 類用于向文件寫(xiě)入二進(jìn)制數(shù)據(jù)。一個(gè) BinaryWriter 對(duì)象通過(guò)向它的構(gòu)造函數(shù)傳遞 FileStream 對(duì)象而被創(chuàng)建。
下表列出了 BinaryWriter 類中一些常用的方法:
序號(hào) | 方法 & 描述 |
---|---|
1 | public override void Close()關(guān)閉 BinaryWriter 對(duì)象和基礎(chǔ)流。 |
2 | public virtual void Flush()清理當(dāng)前編寫(xiě)器的所有緩沖區(qū),使得所有緩沖數(shù)據(jù)寫(xiě)入基礎(chǔ)設(shè)備。 |
3 | public virtual long Seek( int offset, SeekOrigin origin ) 設(shè)置當(dāng)前流內(nèi)的位置。 |
4 | public virtual void Write( bool value ) 把一個(gè)單字節(jié)的布爾值寫(xiě)入到當(dāng)前流中,0 表示 false,1 表示 true。 |
5 | public virtual void Write( byte value ) 把一個(gè)無(wú)符號(hào)字節(jié)寫(xiě)入到當(dāng)前流中,并把流的位置往前移一個(gè)字節(jié)。 |
6 | public virtual void Write( byte[] buffer ) 把一個(gè)字節(jié)數(shù)組寫(xiě)入到基礎(chǔ)流中。 |
7 | public virtual void Write( char ch ) 把一個(gè) Unicode 字符寫(xiě)入到當(dāng)前流中,并把流的當(dāng)前位置按照所使用的編碼和要寫(xiě)入到流中的指定的字符往前移。 |
8 | public virtual void Write( char[] chars ) 把一個(gè)字符數(shù)組寫(xiě)入到當(dāng)前流中,并把流的當(dāng)前位置按照所使用的編碼和要寫(xiě)入到流中的指定的字符往前移。 |
9 | public virtual void Write( double value ) 把一個(gè) 8 字節(jié)浮點(diǎn)值寫(xiě)入到當(dāng)前流中,并把流位置往前移八個(gè)字節(jié)。 |
10 | public virtual void Write( int value ) 把一個(gè) 4 字節(jié)有符號(hào)整數(shù)寫(xiě)入到當(dāng)前流中,并把流位置往前移四個(gè)字節(jié)。 |
11 | public virtual void Write( string value ) 把一個(gè)以長(zhǎng)度為前綴的字符串寫(xiě)入到 BinaryWriter 的當(dāng)前編碼的流中,并把流的當(dāng)前位置按照所使用的編碼和要寫(xiě)入到流中的指定的字符往前移。 |
如需查看完整的方法列表,請(qǐng)?jiān)L問(wèn)微軟的 C# 文檔。
實(shí)例
下面的實(shí)例演示了讀取和寫(xiě)入二進(jìn)制數(shù)據(jù):
實(shí)例
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;
}
// 寫(xiě)入文件
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();
}
}
}
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;
}
// 寫(xiě)入文件
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í),它會(huì)產(chǎn)生下列結(jié)果:
Integer data: 25 Double data: 3.14157 Boolean data: True String data: I am happy
相關(guān)文章
- C++ 環(huán)境設(shè)置
- C++ 類 和 對(duì)象
- C++ 接口
- C++ vector 用法
- C++ 面試題
- C語(yǔ)言 教程
- C語(yǔ)言 循環(huán)語(yǔ)句
- C語(yǔ)言 函數(shù)
- C語(yǔ)言 指針
- C語(yǔ)言 預(yù)處理器
- C語(yǔ)言 錯(cuò)誤處理
- C語(yǔ)言 標(biāo)準(zhǔn)庫(kù) <float.h>
- C語(yǔ)言 標(biāo)準(zhǔn)庫(kù) <signal.h>
- C# 類型轉(zhuǎn)換
- C# 運(yùn)算符
- C# 文件的輸入與輸出
- C# 屬性 Property
- C# 泛型 Generic
- C++ 下標(biāo)運(yùn)算符 [] 重載
- C語(yǔ)言 庫(kù)函數(shù) time()