Csharp/C Sharp/File Stream/Binary Read Write — различия между версиями

Материал из .Net Framework эксперт
Перейти к: навигация, поиск
м (1 версия)
 
(нет различий)

Версия 15:31, 26 мая 2010

BinaryWriter and BinaryReader classes for the writing and reading of primitive types

using System;
using System.IO;
public class Binary {
  public static void Main(string [] args) {
    BinaryWriter output = new BinaryWriter(new FileStream("test.dat",FileMode.Create));
    
    output.Write(1);
    
    output.Write(0.01);
   
    output.Close();
    BinaryReader input = new BinaryReader(new FileStream("test.dat",FileMode.Open));
    Console.WriteLine("{0} ", input.ReadInt32());
    Console.WriteLine("{0:F1} ", input.ReadDouble());
    input.Close();
  }
}


Binary Writer Reader

 
using System;
using System.Collections.Generic;
using System.Text;
using System.IO;
class Program {
    static void Main(string[] args) {
        FileInfo f = new FileInfo("BinFile.dat");
        BinaryWriter bw = new BinaryWriter(f.OpenWrite());
        Console.WriteLine("Base stream is: {0}", bw.BaseStream);
        double aDouble = 1234.67;
        int anInt = 34567;
        char[] aCharArray = { "A", "B", "C" };
        bw.Write(aDouble);
        bw.Write(anInt);
        bw.Write(aCharArray);
        bw.Close();
        BinaryReader br = new BinaryReader(f.OpenRead());
        int temp = 0;
        while (br.PeekChar() != -1) {
            Console.Write("{0,7:x} ", br.ReadByte());
            if (++temp == 4) {
                Console.WriteLine();
                temp = 0;
            }
        }
    }
}


Creating a sequential-access file

   using System;
   using System.Data;
   using System.IO;
   using System.Runtime.Serialization.Formatters.Binary;
   using System.Runtime.Serialization;
   public class CreateFile {
      static void Main() {
         BinaryFormatter formatter = new BinaryFormatter();
         FileStream output = new FileStream( "test.dat",FileMode.OpenOrCreate, FileAccess.Write );
         Record record = new Record();
         record.Account = 1234;
         record.FirstName = "FirstName";
         record.LastName = "LastName";
         record.Balance = 1234.345;
         formatter.Serialize( output, record );
         output.Close();
      }
   }
   
   [Serializable]
   public class Record{
      public int Account;
      public String FirstName;
      public String LastName;
      public double Balance;
   }


File pointer move and read binary file

using System;
using System.IO;
using System.Text;
class Class1{
  static void Main(string[] args)  {
         byte[] byData = new byte[100];
         char[] charData = new Char[100];
         try {
            FileStream aFile = new FileStream("practice.txt",FileMode.Open);
            aFile.Seek(55,SeekOrigin.Begin);
            aFile.Read(byData,0,100);
         }
         catch(IOException e)
         {
            Console.WriteLine("An IO exception has been thrown!");
            Console.WriteLine(e.ToString());
            Console.ReadLine();
            return;
         }
         Decoder d = Encoding.UTF8.GetDecoder();
         d.GetChars(byData, 0, byData.Length, charData, 0);
         Console.WriteLine(charData);
         return;
  }
}


new BinaryReader(stream)

 
using System;
using System.IO;
class MainClass
{
    public static byte[] DecimalToByteArray (decimal src){
        using (MemoryStream stream = new MemoryStream()) {
           using (BinaryWriter writer = new BinaryWriter(stream)){
               writer.Write(src);
               return stream.ToArray();
           }
        }
    }
    public static decimal ByteArrayToDecimal (byte[] src){
        using (MemoryStream stream = new MemoryStream(src)){
           using (BinaryReader reader = new BinaryReader(stream)){
              return reader.ReadDecimal();
           }
        }
    }
    public static void Main()
    {
        byte[] b = null;
        b = BitConverter.GetBytes(true);
        Console.WriteLine(BitConverter.ToString(b));
        Console.WriteLine(BitConverter.ToBoolean(b, 0));
        b = BitConverter.GetBytes(3678);
        Console.WriteLine(BitConverter.ToString(b));
        Console.WriteLine(BitConverter.ToInt32(b, 0));
        b = DecimalToByteArray(285998345545.563846696m);
        Console.WriteLine(BitConverter.ToString(b));
        Console.WriteLine(ByteArrayToDecimal(b));
    }
    
}


new BinaryWriter(stream) and Write method

 
using System;
using System.IO;
class MainClass
{
    public static byte[] DecimalToByteArray (decimal src){
        using (MemoryStream stream = new MemoryStream()) {
           using (BinaryWriter writer = new BinaryWriter(stream)){
               writer.Write(src);
               return stream.ToArray();
           }
        }
    }
    public static decimal ByteArrayToDecimal (byte[] src){
        using (MemoryStream stream = new MemoryStream(src)){
           using (BinaryReader reader = new BinaryReader(stream)){
              return reader.ReadDecimal();
           }
        }
    }
    public static void Main()
    {
        byte[] b = null;
        b = BitConverter.GetBytes(true);
        Console.WriteLine(BitConverter.ToString(b));
        Console.WriteLine(BitConverter.ToBoolean(b, 0));
        b = BitConverter.GetBytes(3678);
        Console.WriteLine(BitConverter.ToString(b));
        Console.WriteLine(BitConverter.ToInt32(b, 0));
        b = DecimalToByteArray(12345678.123456m);
        Console.WriteLine(BitConverter.ToString(b));
        Console.WriteLine(ByteArrayToDecimal(b));
    }
}


Read and Write a Binary File

 
using System;
using System.IO;
public class BinaryFileTest {
    private static void Main() {
        FileStream fs = new FileStream("test.dat", FileMode.Create);
        BinaryWriter w = new BinaryWriter(fs);
        w.Write(1.2M);
        w.Write("string");
        w.Write("string 2");
        w.Write("!");
        w.Flush();
        w.Close();
        fs.Close();
        fs = new FileStream("test.dat", FileMode.Open);
        StreamReader sr = new StreamReader(fs);
        Console.WriteLine(sr.ReadToEnd());
        fs.Position = 0;
        BinaryReader br = new BinaryReader(fs);
        Console.WriteLine(br.ReadDecimal());
        Console.WriteLine(br.ReadString());
        Console.WriteLine(br.ReadString());
        Console.WriteLine(br.ReadChar());
        fs.Close();
    }
}


Reading a sequential-access file

   using System;
   using System.Data;
   using System.IO;
   using System.Runtime.Serialization.Formatters.Binary;
   using System.Runtime.Serialization;
   public class CreateFile {
      static void Main() {
         BinaryFormatter formatter = new BinaryFormatter();
         FileStream output = new FileStream( "test.dat",FileMode.OpenOrCreate, FileAccess.Write );
         Record record = new Record();
         record.Account = 1234;
         record.FirstName = "FirstName";
         record.LastName = "LastName";
         record.Balance = 1234.345;
         formatter.Serialize( output, record );
         output.Close();
      
      
         BinaryFormatter reader = new BinaryFormatter();
         FileStream input = new FileStream( "test.dat", FileMode.Open, FileAccess.Read );
         Record record1 =( Record )reader.Deserialize( input );
         
         Console.WriteLine(record1.FirstName);
      }
   }
   [Serializable]
   public class Record{
      public int Account;
      public String FirstName;
      public String LastName;
      public double Balance;
   }


Read the data from a file and desiralize it

/*
 * C# Programmers Pocket Consultant
 * Author: Gregory S. MacBeth
 * Email: gmacbeth@comporium.net
 * Create Date: June 27, 2003
 * Last Modified Date:
 * Version: 1
 */
using System;
using System.IO;
using System.Runtime.Serialization.Formatters.Binary;
namespace Client.Chapter_11___File_and_Streams
{
  public class Class1Chapter_11___File_and_Streams {
    [STAThread]
    static void Main(string[] args)
    {
      Point p1 = new Point();
      p1.xpoint = 0x1111;
      p1.ypoint = 0x2222;
      // Opens a file and serializes the object into it.
      Stream stream = File.Open("onepoint.bin", FileMode.Create);
      BinaryFormatter bformatter = new BinaryFormatter();
      bformatter.Serialize(stream, p1);
      stream.Close();
      //Read the data from a file and desiralize it
      Stream openStream = File.Open("onepoint.bin", FileMode.Open);
      Point desierializedPoint = new Point();
      desierializedPoint = (Point)bformatter.Deserialize(openStream);
    }
  }
  [Serializable()]
  class Point
  {
    public int xpoint;
    public int ypoint;
  }
}


StreamWriter and BinaryWriter

 
using System;
using System.IO;
class BinReadWriteApp
{
    static void Main(string[] args)
    {
        Stream s = new FileStream("Foo.txt", FileMode.Create);
        StreamWriter w = new StreamWriter(s);
        w.Write("Hello World ");
        w.Write(123);
        w.Write(" ");
        w.Write(45.67);
        w.Close();
        s.Close();
   
        Stream t = new FileStream("Bar.dat", FileMode.Create);
        BinaryWriter b = new BinaryWriter(t);
        b.Write("Hello World ");
        b.Write(123);
        b.Write(" ");
        b.Write(45.67);
        b.Close();
        t.Close();
    }
}


Use BinaryReader and BinaryWriter to implement a simple inventory program

/*
C#: The Complete Reference 
by Herbert Schildt 
Publisher: Osborne/McGraw-Hill (March 8, 2002)
ISBN: 0072134852
*/
/* Use BinaryReader and BinaryWriter to implement 
   a simple inventory program. */ 
 
using System; 
using System.IO;  
 
public class Inventory { 
  public static void Main() { 
    BinaryWriter dataOut; 
    BinaryReader dataIn; 
 
    string item; // name of item 
    int onhand;  // number on hand 
    double cost; // cost 
 
    try { 
      dataOut = new 
        BinaryWriter(new FileStream("inventory.dat", 
                                    FileMode.Create)); 
    } 
    catch(IOException exc) { 
      Console.WriteLine(exc.Message + "\nCannot open file."); 
      return; 
    } 
 
    // Write some inventory data to the file. 
    try { 
      dataOut.Write("Hammers");  
      dataOut.Write(10); 
      dataOut.Write(3.95); 
 
      dataOut.Write("Screwdrivers");  
      dataOut.Write(18); 
      dataOut.Write(1.50); 
 
      dataOut.Write("Pliers");  
      dataOut.Write(5); 
      dataOut.Write(4.95); 
 
      dataOut.Write("Saws");  
      dataOut.Write(8); 
      dataOut.Write(8.95); 
    } 
    catch(IOException exc) { 
      Console.WriteLine(exc.Message + "\nWrite error."); 
    } 
 
    dataOut.Close(); 
 
    Console.WriteLine(); 
 
    // Now, open inventory file for reading. 
    try { 
      dataIn = new 
          BinaryReader(new FileStream("inventory.dat", 
                       FileMode.Open)); 
    } 
    catch(FileNotFoundException exc) { 
      Console.WriteLine(exc.Message + "\nCannot open file."); 
      return; 
    } 
 
    // Lookup item entered by user. 
    Console.Write("Enter item to lookup: "); 
    string what = Console.ReadLine(); 
    Console.WriteLine(); 
 
    try { 
      for(;;) { 
        // Read an inventory entry. 
        item = dataIn.ReadString(); 
        onhand = dataIn.ReadInt32(); 
        cost = dataIn.ReadDouble(); 
 
        /* See if the item matches the one requested. 
           If so, display information */ 
        if(item.rupareTo(what) == 0) { 
          Console.WriteLine(onhand + " " + item + " on hand. " + 
                            "Cost: {0:C} each", cost); 
          Console.WriteLine("Total value of {0}: {1:C}." , 
                            item, cost * onhand); 
          break; 
        } 
      } 
    } 
    catch(EndOfStreamException) { 
      Console.WriteLine("Item not found."); 
    } 
    catch(IOException exc) { 
      Console.WriteLine(exc.Message + "Read error."); 
    } 
 
    dataIn.Close();  
  } 
}


Working with the BinaryReader Class

using System;
using System.IO;
   
class MainClass {
    static public void Main() {
        FileStream    BinaryFile = new FileStream("test.dat", FileMode.Create, FileAccess.ReadWrite);
        BinaryReader  Reader = new BinaryReader(BinaryFile);
        BinaryWriter  Writer = new BinaryWriter(BinaryFile);
        
        Writer.Write("a");
        Writer.Write(123);
        Writer.Write(456.789);
        Writer.Write("test string");
        char   ReadCharacter;
        double ReadDouble;
        int    ReadInteger;
        string ReadString;
        
        BinaryFile.Seek(0, SeekOrigin.Begin);
        ReadCharacter = Reader.ReadChar();
        ReadInteger = Reader.ReadInt32();
        ReadDouble = Reader.ReadDouble();
        ReadString = Reader.ReadString();
   
        Console.WriteLine("Character: {0}", ReadCharacter);
        Console.WriteLine("Integer: {0}", ReadInteger);
        Console.WriteLine("Double: {0}", ReadDouble);
        Console.WriteLine("String: {0}", ReadString);
    }
}


Working with the BinaryWriter Class

using System;
using System.IO;
   
class MainClass
{
    static public void Main()
    {
     FileStream BinaryFile = new FileStream("test.dat", FileMode.Create, FileAccess.ReadWrite);
     BinaryWriter  Writer = new BinaryWriter(BinaryFile);
     Writer.Write("a");
     Writer.Write(123);
     Writer.Write(456.789);
     Writer.Write("test string");
    }
}


Write and then read back binary data

/*
C#: The Complete Reference 
by Herbert Schildt 
Publisher: Osborne/McGraw-Hill (March 8, 2002)
ISBN: 0072134852
*/
// Write and then read back binary data. 
 
using System; 
using System.IO;  
 
public class RWData { 
  public static void Main() { 
    BinaryWriter dataOut; 
    BinaryReader dataIn; 
 
    int i = 10; 
    double d = 1023.56; 
    bool b = true; 
 
    try { 
      dataOut = new 
        BinaryWriter(new FileStream("testdata", FileMode.Create)); 
    } 
    catch(IOException exc) { 
      Console.WriteLine(exc.Message + "\nCannot open file."); 
      return; 
    } 
 
    try { 
      Console.WriteLine("Writing " + i); 
      dataOut.Write(i);  
 
      Console.WriteLine("Writing " + d); 
      dataOut.Write(d); 
 
      Console.WriteLine("Writing " + b); 
      dataOut.Write(b); 
 
      Console.WriteLine("Writing " + 12.2 * 7.4); 
      dataOut.Write(12.2 * 7.4); 
 
    } 
    catch(IOException exc) { 
      Console.WriteLine(exc.Message + "\nWrite error."); 
    } 
 
    dataOut.Close(); 
 
    Console.WriteLine(); 
 
    // Now, read them back. 
    try { 
      dataIn = new 
          BinaryReader(new FileStream("testdata", FileMode.Open)); 
    } 
    catch(FileNotFoundException exc) { 
      Console.WriteLine(exc.Message + "\nCannot open file."); 
      return; 
    } 
 
    try { 
      i = dataIn.ReadInt32(); 
      Console.WriteLine("Reading " + i); 
 
      d = dataIn.ReadDouble(); 
      Console.WriteLine("Reading " + d); 
 
      b = dataIn.ReadBoolean(); 
      Console.WriteLine("Reading " + b); 
 
      d = dataIn.ReadDouble(); 
      Console.WriteLine("Reading " + d); 
    } 
    catch(IOException exc) { 
      Console.WriteLine(exc.Message + "Read error."); 
    } 
 
    dataIn.Close();  
  } 
}