C# 二進(jìn)制文件的讀寫

C# 文件的輸入與輸出 C# 文件的輸入與輸出

BinaryReaderBinaryWriter 類用于二進(jìn)制文件的讀寫。

BinaryReader 類

BinaryReader 類用于從文件讀取二進(jìn)制數(shù)據(jù)。一個 BinaryReader 對象通過向它的構(gòu)造函數(shù)傳遞 FileStream 對象而被創(chuàng)建。

下表列出了 BinaryReader 類中一些常用的方法

序號方法 & 描述
1public override void Close()
關(guān)閉 BinaryReader 對象和基礎(chǔ)流。
2public virtual int Read()
從基礎(chǔ)流中讀取字符,并把流的當(dāng)前位置往前移。
3public virtual bool ReadBoolean()
從當(dāng)前流中讀取一個布爾值,并把流的當(dāng)前位置往前移一個字節(jié)。
4public virtual byte ReadByte()
從當(dāng)前流中讀取下一個字節(jié),并把流的當(dāng)前位置往前移一個字節(jié)。
5public virtual byte[] ReadBytes( int count )
從當(dāng)前流中讀取指定數(shù)目的字節(jié)到一個字節(jié)數(shù)組中,并把流的當(dāng)前位置往前移指定數(shù)目的字節(jié)。
6public virtual char ReadChar()
從當(dāng)前流中讀取下一個字節(jié),并把流的當(dāng)前位置按照所使用的編碼和從流中讀取的指定的字符往前移。
7public virtual char[] ReadChars( int count )
從當(dāng)前流中讀取指定數(shù)目的字節(jié),在一個字符數(shù)組中返回?cái)?shù)組,并把流的當(dāng)前位置按照所使用的編碼和從流中讀取的指定的字符往前移。
8public virtual double ReadDouble()
從當(dāng)前流中讀取一個 8 字節(jié)浮點(diǎn)值,并把流的當(dāng)前位置往前移八個字節(jié)。
9public virtual int ReadInt32()
從當(dāng)前流中讀取一個 4 字節(jié)有符號整數(shù),并把流的當(dāng)前位置往前移四個字節(jié)。
10public 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 類中一些常用的方法

序號方法 & 描述
1public override void Close()
關(guān)閉 BinaryWriter 對象和基礎(chǔ)流。
2public virtual void Flush()
清理當(dāng)前編寫器的所有緩沖區(qū),使得所有緩沖數(shù)據(jù)寫入基礎(chǔ)設(shè)備。
3public virtual long Seek( int offset, SeekOrigin origin )
設(shè)置當(dāng)前流內(nèi)的位置。
4public virtual void Write( bool value )
把一個單字節(jié)的布爾值寫入到當(dāng)前流中,0 表示 false,1 表示 true。
5public virtual void Write( byte value )
把一個無符號字節(jié)寫入到當(dāng)前流中,并把流的位置往前移一個字節(jié)。
6public virtual void Write( byte[] buffer )
把一個字節(jié)數(shù)組寫入到基礎(chǔ)流中。
7public virtual void Write( char ch )
把一個 Unicode 字符寫入到當(dāng)前流中,并把流的當(dāng)前位置按照所使用的編碼和要寫入到流中的指定的字符往前移。
8public virtual void Write( char[] chars )
把一個字符數(shù)組寫入到當(dāng)前流中,并把流的當(dāng)前位置按照所使用的編碼和要寫入到流中的指定的字符往前移。
9public virtual void Write( double value )
把一個 8 字節(jié)浮點(diǎn)值寫入到當(dāng)前流中,并把流位置往前移八個字節(jié)。
10public virtual void Write( int value )
把一個 4 字節(jié)有符號整數(shù)寫入到當(dāng)前流中,并把流位置往前移四個字節(jié)。
11public 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

C# 文件的輸入與輸出 C# 文件的輸入與輸出