Đọc và ghi binary file trong C#



Hai lớp BinaryReaderBinaryWriter trong C# được sử dụng để đọc và ghi một binary file (file nhị phân).

Lớp BinaryReader trong C#

Lớp BinaryReader trong C# được sử dụng để đọc dữ liệu nhị phân từ một file. Một đối tượng BinaryReader được tạo bằng cách truyền một đối tượng FileStream tới constructor của nó.

Bảng sau liệt kê các phương thức được sử dụng phổ biến của lớp BinaryReader trong C#:

Stt Phương thức
1 public override void Close()

Đóng đối tượng BinaryReader và Underlying Stream

2 public virtual int Read()

Đọc ký tự từ Underlying Stream và tăng vị trí hiện tại của stream

3 public virtual bool ReadBoolean()

Đọc một giá trị Boolean từ stream hiện tại và tăng vị trí hiện tại của stream thêm 1 byte

4 public virtual byte ReadByte()

Đọc byte kế tiếp từ stream hiện tại và tăng vị trí hiện tại của stream thêm 1 byte

5 public virtual byte[] ReadBytes(int count)

Đọc số byte đã cho từ stream hiện tại vào trong một mảng byte và tăng vị trí hiện tại bởi số byte đó

6 public virtual char ReadChar()

Đọc ký tự tiếp theo từ stream hiện tại và tăng vị trí hiện tại của stream mà phù hợp với Encoding đã sử dụng và ký tự cụ thể đang được đọc từ stream đó

7 public virtual char[] ReadChars(int count)

Đọc số ký tự đã xác định từ stream hiện tại, trả về dữ liệu trong một mảng ký tự, và tăng vị trí hiện tại mà phù hợp với Encoding đã sử dụng và ký tự cụ thể đang được đọc từ stream đó

8 public virtual double ReadDouble()

Đọc một giá trị số thực 8 byte từ stream hiện tại và tăng vị trí hiện tại của stream thêm 8 byte

9 public virtual int ReadInt32()

Đọc một giá trị signed integer 4 byte từ stream hiện tại và tăng vị trí hiện tại của stream thêm 4 byte

10 public virtual string ReadString()

Đọc một chuỗi từ stream hiện tại. Chuỗi được đặt trước với length, được mã hóa như là một integer 7 bit tại một thời điểm

Quảng cáo

Lớp BinaryWriter trong C#

Lớp BinaryWriter được sử dụng để ghi dữ liệu nhị phân tới một stream. Một đối tượng BinaryWriter được tạo bằng cách truyền một đối tượng FileStream tới constructor của nó.

Bảng dưới liệt kê các phương thức được sử dụng phổ biến của lớp BinaryWriter trong C#:

Stt Phương thức
1 public override void Close()

Đóng đối tượng BinaryWriter và Underlying Stream

2 public virtual void Flush()

Xóa tất cả buffer cho Writer hiện tại và làm cho bất kỳ dữ liệu đã được đệm nào để được ghi tới Underlying Device

3 public virtual long Seek(int offset, SeekOrigin origin)

Thiết lập vị trí bên trong Stream hiện tại

4 public virtual void Write(bool value)

Ghi một giá trị Boolean 1 byte tới stream hiện tại, với: 0 biểu diễn false, 1 biểu diễn true

5 public virtual void Write(byte value)

Ghi một unsigned byte tới stream hiện tại và tăng vị trí stream thêm 1 byte

6 public virtual void Write(byte[] buffer)

Ghi một mảng byte tới underlying stream

7 public virtual void Write(char ch)

Ghi một ký tự Unicode tới stream hiện tại và tăng vị trí hiện tại của stream mà phù hợp với Encoding đã sử dụng và ký tự cụ thể đang được ghi tới stream đó

8 public virtual void Write(char[] chars)

Ghi một mảng ký tự tới stream hiện tại và tăng vị trí hiện tại của stream mà phù hợp với Encoding đã sử dụng và ký tự cụ thể đang được ghi tới stream đó

9 public virtual void Write(double value)

Ghi một giá trị số thực 8 byte tới stream hiện tại và tăng vị trí stream thêm 8 byte

10 public virtual void Write(int value)

Ghi một giá trị signed integer 4 byte tới stream hiện tại và tăng vị trí stream thêm 4 byte

11 public virtual void Write(string value)

Ghi một chuỗi có tiền tố dài tới stream này trong Encoding hiện tại của BinaryWriter, và tăng vị trí hiện tại của stream mà phù hợp với Encoding đã sử dụng và ký tự cụ thể đang được ghi tới stream đó

Để có danh sách đầy đủ của các phương thức của lớp BinaryReader và BinaryWriter, bạn tham khảo Microsoft Documentation về C#.

Ví dụ

Quảng cáo

Dưới đây là ví dụ minh họa cách đọc và ghi dữ liệu nhị phân trong C#:

using System;
using System.IO;

namespace VietJackCsharp
{
    class TestCsharp
    {
        static void Main(string[] args)
        {
            Console.WriteLine("Vi du minh hoa doc va ghi binary file trong C#");
            Console.WriteLine("---------------------------------------------");

            BinaryWriter bw;
            BinaryReader br;
            int i = 25;
            double d = 3.14157;
            bool b = true;
            string s = "Doc ghi binary file";

            //tao file co ten la mydata
            try
            {
                bw = new BinaryWriter(new FileStream("mydata", FileMode.Create));
            }
            catch (IOException e)
            {
                Console.WriteLine(e.Message + "\n Khong the tao file.");
                return;
            }

            //ghi du lieu vao file
            try
            {
                bw.Write(i);
                bw.Write(d);
                bw.Write(b);
                bw.Write(s);
            }

            catch (IOException e)
            {
                Console.WriteLine(e.Message + "\n Khong the ghi du lieu vao file.");
                return;
            }
            bw.Close();

            //doc file
            try
            {
                br = new BinaryReader(new FileStream("mydata", FileMode.Open));
            }
            catch (IOException e)
            {
                Console.WriteLine(e.Message + "\n Khong the mo file.");
                return;
            }
            try
            {
                i = br.ReadInt32();
                Console.WriteLine("Du lieu int: {0}", i);
                d = br.ReadDouble();
                Console.WriteLine("Du lieu double: {0}", d);
                b = br.ReadBoolean();
                Console.WriteLine("Du lieu boolean: {0}", b);
                s = br.ReadString();
                Console.WriteLine("Du lieu string: {0}", s);
            }
            catch (IOException e)
            {
                Console.WriteLine(e.Message + "\n Khong the doc file.");
                return;
            }
            br.Close();

            Console.ReadKey();
        }
    }
}

Nếu bạn không sử dụng lệnh Console.ReadKey(); thì chương trình sẽ chạy và kết thúc luôn (nhanh quá đến nỗi bạn không kịp nhìn kết quả). Lệnh này cho phép chúng ta nhìn kết quả một cách rõ ràng hơn.

Biên dịch và chạy chương trình C# trên sẽ cho kết quả sau:

Đọc ghi file nhị phân trong C#

Đã có app VietJack trên điện thoại, giải bài tập SGK, SBT Soạn văn, Văn mẫu, Thi online, Bài giảng....miễn phí. Tải ngay ứng dụng trên Android và iOS.

Theo dõi chúng tôi miễn phí trên mạng xã hội facebook và youtube:

Các bạn có thể mua thêm khóa học JAVA CORE ONLINE VÀ ỨNG DỤNG cực hay, giúp các bạn vượt qua các dự án trên trường và đi thực tập Java. Khóa học có giá chỉ 300K, nhằm ưu đãi, tạo điều kiện cho sinh viên cho thể mua khóa học.

Nội dung khóa học gồm 16 chuơng và 100 video cực hay, học trực tiếp tại https://www.udemy.com/tu-tin-di-lam-voi-kien-thuc-ve-java-core-toan-tap/ Bạn nào có nhu cầu mua, inbox trực tiếp a Tuyền, cựu sinh viên Bách Khoa K53, fb: https://www.facebook.com/tuyen.vietjack

Follow facebook cá nhân Nguyễn Thanh Tuyền https://www.facebook.com/tuyen.vietjack để tiếp tục theo dõi các loạt bài mới nhất về Java,C,C++,Javascript,HTML,Python,Database,Mobile.... mới nhất của chúng tôi.


file_io_trong_csharp.jsp


Tài liệu giáo viên