C# 二進制文件的讀寫
C# 二進制文件的讀寫
BinaryReader 和 BinaryWriter 類用于二進制文件的讀寫。
BinaryReader 類
BinaryReader 類用于從文件讀取二進制數(shù)據(jù)。一個 BinaryReader 對象通過向它的構造函數(shù)傳遞 FileStream 對象而被創(chuàng)建。
下表列出了 BinaryReader 類中一些常用的方法:
序號 | 方法 & 描述 |
---|---|
1 | public override void Close()關閉 BinaryReader 對象和基礎流。 |
2 | public virtual int Read()從基礎流中讀取字符,并把流的當前位置往前移。 |
3 | public virtual bool ReadBoolean()從當前流中讀取一個布爾值,并把流的當前位置往前移一個字節(jié)。 |
4 | public virtual byte ReadByte()從當前流中讀取下一個字節(jié),并把流的當前位置往前移一個字節(jié)。 |
5 | public virtual byte[] ReadBytes( int count ) 從當前流中讀取指定數(shù)目的字節(jié)到一個字節(jié)數(shù)組中,并把流的當前位置往前移指定數(shù)目的字節(jié)。 |
6 | public virtual char ReadChar()從當前流中讀取下一個字節(jié),并把流的當前位置按照所使用的編碼和從流中讀取的指定的字符往前移。 |
7 | public virtual char[] ReadChars( int count )從當前流中讀取指定數(shù)目的字節(jié),在一個字符數(shù)組中返回數(shù)組,并把流的當前位置按照所使用的編碼和從流中讀取的指定的字符往前移。 |
8 | public virtual double ReadDouble()從當前流中讀取一個 8 字節(jié)浮點值,并把流的當前位置往前移八個字節(jié)。 |
9 | public virtual int ReadInt32()從當前流中讀取一個 4 字節(jié)有符號整數(shù),并把流的當前位置往前移四個字節(jié)。 |
10 | public virtual string ReadString() 從當前流中讀取一個字符串。字符串以長度作為前綴,同時編碼為一個七位的整數(shù)。 |
如需查看完整的方法列表,請訪問微軟的 C# 文檔。
BinaryWriter 類
BinaryWriter 類用于向文件寫入二進制數(shù)據(jù)。一個 BinaryWriter 對象通過向它的構造函數(shù)傳遞 FileStream 對象而被創(chuàng)建。
下表列出了 BinaryWriter 類中一些常用的方法:
序號 | 方法 & 描述 |
---|---|
1 | public override void Close()關閉 BinaryWriter 對象和基礎流。 |
2 | public virtual void Flush()清理當前編寫器的所有緩沖區(qū),使得所有緩沖數(shù)據(jù)寫入基礎設備。 |
3 | public virtual long Seek( int offset, SeekOrigin origin ) 設置當前流內(nèi)的位置。 |
4 | public virtual void Write( bool value ) 把一個單字節(jié)的布爾值寫入到當前流中,0 表示 false,1 表示 true。 |
5 | public virtual void Write( byte value ) 把一個無符號字節(jié)寫入到當前流中,并把流的位置往前移一個字節(jié)。 |
6 | public virtual void Write( byte[] buffer ) 把一個字節(jié)數(shù)組寫入到基礎流中。 |
7 | public virtual void Write( char ch ) 把一個 Unicode 字符寫入到當前流中,并把流的當前位置按照所使用的編碼和要寫入到流中的指定的字符往前移。 |
8 | public virtual void Write( char[] chars ) 把一個字符數(shù)組寫入到當前流中,并把流的當前位置按照所使用的編碼和要寫入到流中的指定的字符往前移。 |
9 | public virtual void Write( double value ) 把一個 8 字節(jié)浮點值寫入到當前流中,并把流位置往前移八個字節(jié)。 |
10 | public virtual void Write( int value ) 把一個 4 字節(jié)有符號整數(shù)寫入到當前流中,并把流位置往前移四個字節(jié)。 |
11 | public virtual void Write( string value ) 把一個以長度為前綴的字符串寫入到 BinaryWriter 的當前編碼的流中,并把流的當前位置按照所使用的編碼和要寫入到流中的指定的字符往前移。 |
如需查看完整的方法列表,請訪問微軟的 C# 文檔。
實例
下面的實例演示了讀取和寫入二進制數(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();
}
}
}
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();
}
}
}
當上面的代碼被編譯和執(zhí)行時,它會產(chǎn)生下列結(jié)果:
Integer data: 25 Double data: 3.14157 Boolean data: True String data: I am happy