خواندن و نوشتن فایل های باینری در زبان سی شارپ
در زبان برنامه نویسی سی شارپ کلاس BinaryReader و BinaryWriter به منظور خواندن و نوشتن فایل های باینری در زبان سی شارپ استفاده می شوند.
کلاس BinaryReader
کلاس BinaryReader برای خواندن داده های باینری از یک فایل استفاده می شود. یک شیء BinaryReader با ارسال یک شیء از نوع کلاس FileStream به سازنده آن ایجاد می شود.
جدول زیر متدهای رایج مورد استفاده در کلاس BinaryReader را توصیف می کند.
ردیف | توضیحات |
1 | public override void Close() شیء جاری BinaryReader را می بندد. |
2 | public virtual int Read() کاراکتر ها را از جریان می خواند و موقعیت فعلی جریان را افزایش می دهد. |
3 | public virtual bool ReadBoolean() یک مقدار بولین را از جریان فعلی می خواند و موقعیت فعلی جریان را یک بایت افزایش می دهد. |
4 | public virtual byte ReadByte() بایت بعدی را از جریان فعلی می خواند و موقعیت فعلی جریان را یک بایت افزایش می دهد. |
5 | public virtual byte[] ReadBytes(int count) به تعداد مشخص شده بایت ها را از جریان می خواند و در یک آرایه قرار می دهد. سپس موقعیت فعلی جریان را به اندازه تعداد بایت های مشخص شده افزایش می دهد. |
6 | public virtual char ReadChar() کاراکتر بعدی را از جریان فعلی می خواند و موقعیت فعلی جریان را بر اساس Encoding آن کاراکتر افزایش می دهد. |
7 | public virtual char[] ReadChars(int count) به تعداد مشخص شده کاراکترها را از جریان می خواند و در یک آرایه قرار می دهد. سپس موقعیت فعلی جریان را بر اساس Encoding و به اندازه تعداد کاراکترهای مشخص شده افزایش می دهد. |
8 | public virtual double ReadDouble() یک مقدار اعشاری از جریان می خواند و موقعیت فعلی جریان را به اندازه 8 بایت افزایش می دهد. |
9 | public virtual int ReadInt32() یک مقدار عدد صحیح از جریان می خواند و موقعیت فعلی جریان را به اندازه 4 بایت افزایش می دهد. |
10 | public virtual string ReadString() یک رشته را از جریان فعلی می خواند. |
کلاس BinaryWriter
کلاس BinaryWriter به منظور نوشتن داده های باینری در یک فایل استفاده می شود. یک شیء BinaryWriter با ارسال یک شیء از نوع کلاس FileStream به سازنده آن ایجاد می شود.
جدول زیر متد های رایج مورد استفاده در کلاس BinaryWriter را توصیف می کند.
ردیف | توضیحات |
1 | public override void Close() شیء جاری BinaryWriter را می بندد. |
2 | public virtual void Flush() تمام بافرها برای Writer فعلی پاک می کند و باعث می شود داده های بافر شده در جریان مشخص شده نوشته شوند. |
3 | public virtual long Seek(int offset, SeekOrigin origin) موقعیت را در جریان فعلی تنظیم می کند. |
4 | public virtual void Write(bool value) مقدار بولی یک بایت را به جریان فعلی می نویسد، 0 نشانگر false و 1 نشان دهنده true می باشد. |
5 | public virtual void Write(byte value) یک بایت بدون علامت را در جریان فعلی می نویسد و موقعیت فعلی جریان را یک بایت افزایش می دهد. |
6 | public virtual void Write(byte[] buffer) آرایه ای از بایت ها را در جریان فعلی می نویسد. |
7 | public virtual void Write(char ch) یک کاراکتر یونیکد را به جریان فعلی می نویسد و موقعیت فعلی جریان را مطابق با کدگذاری مورد استفاده و شخصیت های خاصی که به جریان نوشته می شود، پیشرفت می کند. |
8 | public virtual void Write(char[] chars) آرایه ای از کاراکترها را در جریان فعلی می نویسد. سپس موقعیت فعلی جریان را بر اساس Encoding استفاده شده افزایش می دهد. |
9 | public virtual void Write(double value) یک مقدار اعشاری در جریان می نویسد و موقعیت فعلی جریان را به اندازه 8 بایت افزایش می دهد. |
10 | public virtual void Write(int value) یک مقدار عدد صحیح در جریان می نویسد و موقعیت فعلی جریان را به اندازه 4 بایت افزایش می دهد. |
11 | public virtual void Write(string value) یک رشته را در جریان می نویسد. |
برای مشاهده لیست کامل متدها، به مستندات سی شارپ مایکروسافت مراجعه کنید.
مثال
مثال زیر نحوه نوشتن و خواندن داده های باینری در یک فایل را نشان می دهد:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 | 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"; //create the file try { bw = new BinaryWriter(new FileStream("mydata", FileMode.Create)); } catch (IOException e) { Console.WriteLine(e.Message + "n Cannot create file."); return; } //writing into the file 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(); //reading from the file 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(); } } } |
زمانی که کد بالا کامپایل و اجرا شود، نتیجه زیر را تولید خواهد کرد:
1 2 3 4 | Integer data: 25 Double data: 3.14157 Boolean data: True String data: I am happy |
هیچ نظری ثبت نشده است