BinaryWriter Class (System.IO)

Switch View :
ScriptFree
.NET Framework Class Library
BinaryWriter Class

Writes primitive types in binary to a stream and supports writing strings in a specific encoding.

Inheritance Hierarchy

System.Object
  System.IO.BinaryWriter

Namespace:  System.IO
Assembly:  mscorlib (in mscorlib.dll)
Syntax

Visual Basic
<SerializableAttribute> _
<ComVisibleAttribute(True)> _
Public Class BinaryWriter _
	Implements IDisposable
C#
[SerializableAttribute]
[ComVisibleAttribute(true)]
public class BinaryWriter : IDisposable
Visual C++
[SerializableAttribute]
[ComVisibleAttribute(true)]
public ref class BinaryWriter : IDisposable
F#
[<SerializableAttribute>]
[<ComVisibleAttribute(true)>]
type BinaryWriter =  
    class
        interface IDisposable
    end

The BinaryWriter type exposes the following members.

Constructors

  Name Description
Protected method Supported by the XNA Framework Supported by Portable Class Library BinaryWriter() Initializes a new instance of the BinaryWriter class that writes to a stream.
Public method Supported by the XNA Framework Supported by Portable Class Library BinaryWriter(Stream) Initializes a new instance of the BinaryWriter class based on the supplied stream and using UTF-8 as the encoding for strings.
Public method Supported by the XNA Framework Supported by Portable Class Library BinaryWriter(Stream, Encoding) Initializes a new instance of the BinaryWriter class based on the supplied stream and a specific character encoding.
Top
Properties

  Name Description
Public property Supported by the XNA Framework Supported by Portable Class Library BaseStream Gets the underlying stream of the BinaryWriter.
Top
Methods

  Name Description
Public method Supported by the XNA Framework Close Closes the current BinaryWriter and the underlying stream.
Public method Supported by Portable Class Library Dispose() Releases all resources used by the current instance of the BinaryWriter class.
Protected method Supported by the XNA Framework Supported by Portable Class Library Dispose(Boolean) Releases the unmanaged resources used by the BinaryWriter and optionally releases the managed resources.
Public method Supported by the XNA Framework Supported by Portable Class Library Equals(Object) Determines whether the specified Object is equal to the current Object. (Inherited from Object.)
Protected method Supported by the XNA Framework Supported by Portable Class Library Finalize Allows an object to try to free resources and perform other cleanup operations before it is reclaimed by garbage collection. (Inherited from Object.)
Public method Supported by the XNA Framework Supported by Portable Class Library Flush Clears all buffers for the current writer and causes any buffered data to be written to the underlying device.
Public method Supported by the XNA Framework Supported by Portable Class Library GetHashCode Serves as a hash function for a particular type. (Inherited from Object.)
Public method Supported by the XNA Framework Supported by Portable Class Library GetType Gets the Type of the current instance. (Inherited from Object.)
Protected method Supported by the XNA Framework Supported by Portable Class Library MemberwiseClone Creates a shallow copy of the current Object. (Inherited from Object.)
Public method Supported by the XNA Framework Supported by Portable Class Library Seek Sets the position within the current stream.
Public method Supported by the XNA Framework Supported by Portable Class Library ToString Returns a string that represents the current object. (Inherited from Object.)
Public method Supported by the XNA Framework Supported by Portable Class Library Write(Boolean) Writes a one-byte Boolean value to the current stream, with 0 representing false and 1 representing true.
Public method Supported by the XNA Framework Supported by Portable Class Library Write(Byte) Writes an unsigned byte to the current stream and advances the stream position by one byte.
Public method Supported by the XNA Framework Supported by Portable Class Library Write(Byte[]) Writes a byte array to the underlying stream.
Public method Supported by the XNA Framework Supported by Portable Class Library Write(Char) Writes a Unicode character to the current stream and advances the current position of the stream in accordance with the Encoding used and the specific characters being written to the stream.
Public method Supported by the XNA Framework Supported by Portable Class Library Write(Char[]) Writes a character array to the current stream and advances the current position of the stream in accordance with the Encoding used and the specific characters being written to the stream.
Public method Supported by the XNA Framework Write(Decimal) Writes a decimal value to the current stream and advances the stream position by sixteen bytes.
Public method Supported by the XNA Framework Supported by Portable Class Library Write(Double) Writes an eight-byte floating-point value to the current stream and advances the stream position by eight bytes.
Public method Supported by the XNA Framework Supported by Portable Class Library Write(Int16) Writes a two-byte signed integer to the current stream and advances the stream position by two bytes.
Public method Supported by the XNA Framework Supported by Portable Class Library Write(Int32) Writes a four-byte signed integer to the current stream and advances the stream position by four bytes.
Public method Supported by the XNA Framework Supported by Portable Class Library Write(Int64) Writes an eight-byte signed integer to the current stream and advances the stream position by eight bytes.
Public method Supported by the XNA Framework Supported by Portable Class Library Write(SByte) Writes a signed byte to the current stream and advances the stream position by one byte.
Public method Supported by the XNA Framework Supported by Portable Class Library Write(Single) Writes a four-byte floating-point value to the current stream and advances the stream position by four bytes.
Public method Supported by the XNA Framework Supported by Portable Class Library Write(String) Writes a length-prefixed string to this stream in the current encoding of the BinaryWriter, and advances the current position of the stream in accordance with the encoding used and the specific characters being written to the stream.
Public method Supported by the XNA Framework Supported by Portable Class Library Write(UInt16) Writes a two-byte unsigned integer to the current stream and advances the stream position by two bytes.
Public method Supported by the XNA Framework Supported by Portable Class Library Write(UInt32) Writes a four-byte unsigned integer to the current stream and advances the stream position by four bytes.
Public method Supported by the XNA Framework Supported by Portable Class Library Write(UInt64) Writes an eight-byte unsigned integer to the current stream and advances the stream position by eight bytes.
Public method Supported by the XNA Framework Supported by Portable Class Library Write(Byte[], Int32, Int32) Writes a region of a byte array to the current stream.
Public method Supported by the XNA Framework Supported by Portable Class Library Write(Char[], Int32, Int32) Writes a section of a character array to the current stream, and advances the current position of the stream in accordance with the Encoding used and perhaps the specific characters being written to the stream.
Protected method Supported by the XNA Framework Supported by Portable Class Library Write7BitEncodedInt Writes a 32-bit integer in a compressed format.
Top
Fields

  Name Description
Public field Static member Supported by the XNA Framework Supported by Portable Class Library Null Specifies a BinaryWriter with no backing store.
Protected field Supported by the XNA Framework Supported by Portable Class Library OutStream Holds the underlying stream.
Top
Explicit Interface Implementations

  Name Description
Explicit interface implemetation Private method Supported by the XNA Framework IDisposable.Dispose Performs application-defined tasks associated with freeing, releasing, or resetting unmanaged resources.
Top
Remarks

A derived class can override the methods of this class to give unique character encodings.

For a list of common I/O tasks, see Common I/O Tasks.

Examples

The following code example demonstrates how to store and retrieve application settings in a file.

Visual Basic

Imports Microsoft.VisualBasic
Imports System
Imports System.IO
Imports System.Security.Permissions

' Store and retrieve application settings.
Public Class AppSettings

    Const fileName As String = "AppSettings#@@#.dat"
    Dim aspRatio As Single
    Dim lkupDir As String
    Dim saveTime As Integer
    Dim statusBar As Boolean

    Sub New()

        ' Create default application settings.
        aspRatio   = 1.3333
        lkupDir     = "C:\AppDirectory"
        saveTime  = 30
        statusBar = False

        If File.Exists(fileName) Then
            Dim binReader As New BinaryReader( _
                File.Open(fileName, FileMode.Open))
            Try

                ' If the file is not empty,
                ' read the application settings.
                ' First read 4 bytes into a buffer to 
                ' determine if the file is empty.
                Dim testArray As Byte() = {0,0,0,0}
                Dim count As Integer = binReader.Read(testArray, 0, 3)

                If count <> 0 Then

                    ' Reset the position in the stream to zero.
                    binReader.BaseStream.Seek(0, SeekOrigin.Begin)

                    aspRatio   = binReader.ReadSingle()
                    lkupDir     = binReader.ReadString()
                    saveTime  = binReader.ReadInt32()
                    statusBar = binReader.ReadBoolean()
                    Return
                End If

            ' If the end of the stream is reached before reading
            ' the four data values, ignore the error and use the
            ' default settings for the remaining values.
            Catch ex As EndOfStreamException
                Console.WriteLine("{0} caught and ignored. " & _ 
                    "Using default values.", ex.GetType().Name)
            Finally
                binReader.Close()
            End Try
        End If

    End Sub

    ' Create a file and store the application settings.
    Sub Close()
        Dim binWriter As New BinaryWriter( _
            File.Open(fileName, FileMode.Create))
        Try
            binWriter.Write(aspRatio)
            binWriter.Write(lkupDir)
            binWriter.Write(saveTime)
            binWriter.Write(statusBar)
        Finally
            binWriter.Close()
        End Try
    End Sub

    Property AspectRatio As Single
        Get
            Return aspRatio
        End Get
        Set
            aspRatio = Value
        End Set
    End Property

    Property LookupDir As String
        Get
            Return lkupDir
        End Get
        Set
            lkupDir = Value
        End Set
    End Property

    Property AutoSaveTime As Integer
        Get
            Return saveTime
        End Get
        Set
            saveTime = Value
        End Set
    End Property

    Property ShowStatusBar As Boolean
        Get
            Return statusBar
        End Get
        Set
            statusBar = Value
        End Set
    End Property

End Class

Public Class Test
    Shared Sub Main()
        ' Load application settings.
        Dim appSettings As New AppSettings()
        Console.WriteLine("App settings:" & vbcrLf & "Aspect " & _
            "Ratio: {0}, Lookup directory: {1}," & vbcrLf & "Auto " & _
            "save time: {2} minutes, Show status bar: {3}" & vbCrLf, _
            New Object(3){appSettings.AspectRatio.ToString(), _
            appSettings.LookupDir, _
            appSettings.AutoSaveTime.ToString(), _
            appSettings.ShowStatusBar.ToString()})

        ' Change the settings.
        appSettings.AspectRatio   = 1.250
        appSettings.LookupDir     = "C:\Temp"
        appSettings.AutoSaveTime  = 10
        appSettings.ShowStatusBar = True

        ' Save the new settings.
        appSettings.Close()

    End Sub
End Class


C#

using System;
using System.IO;
using System.Security.Permissions;

// Store and retrieve application settings.
class AppSettings
{
    const string fileName = "AppSettings#@@#.dat";
    float  aspectRatio;
    string lookupDir;
    int    autoSaveTime;
    bool   showStatusBar;

    public AppSettings()
    {
        // Create default application settings.
        aspectRatio   = 1.3333F;
        lookupDir     = @"C:\AppDirectory";
        autoSaveTime  = 30;
        showStatusBar = false;

        if(File.Exists(fileName))
        {
            BinaryReader binReader =
                new BinaryReader(File.Open(fileName, FileMode.Open));
            try
            {
                // If the file is not empty,
                // read the application settings.
                // First read 4 bytes into a buffer to
                // determine if the file is empty.
                byte[] testArray = new byte[3];
                int count = binReader.Read(testArray, 0, 3);

                if (count != 0)
                {
                    // Reset the position in the stream to zero.
                    binReader.BaseStream.Seek(0, SeekOrigin.Begin);

                    aspectRatio   = binReader.ReadSingle();
                    lookupDir     = binReader.ReadString();
                    autoSaveTime  = binReader.ReadInt32();
                    showStatusBar = binReader.ReadBoolean();
                }
            }

            // If the end of the stream is reached before reading
            // the four data values, ignore the error and use the
            // default settings for the remaining values.
            catch(EndOfStreamException e)
            {
                Console.WriteLine("{0} caught and ignored. " +
                    "Using default values.", e.GetType().Name);
            }
            finally
            {
                binReader.Close();
            }
        }

    }

    // Create a file and store the application settings.
    public void Close()
    {
        using(BinaryWriter binWriter =
            new BinaryWriter(File.Open(fileName, FileMode.Create)))
        {
            binWriter.Write(aspectRatio);
            binWriter.Write(lookupDir);
            binWriter.Write(autoSaveTime);
            binWriter.Write(showStatusBar);
        }
    }

    public float AspectRatio
    {
        get{ return aspectRatio; }
        set{ aspectRatio = value; }
    }

    public string LookupDir
    {
        get{ return lookupDir; }
        set{ lookupDir = value; }
    }

    public int AutoSaveTime
    {
        get{ return autoSaveTime; }
        set{ autoSaveTime = value; }
    }

    public bool ShowStatusBar
    {
        get{ return showStatusBar; }
        set{ showStatusBar = value; }
    }
}

class Test
{
    static void Main()
    {
        // Load application settings.
        AppSettings appSettings = new AppSettings();
        Console.WriteLine("App settings:\nAspect Ratio: {0}, " +
            "Lookup directory: {1},\nAuto save time: {2} minutes, " +
            "Show status bar: {3}\n",
            new Object[4]{appSettings.AspectRatio.ToString(),
            appSettings.LookupDir, appSettings.AutoSaveTime.ToString(),
            appSettings.ShowStatusBar.ToString()});

        // Change the settings.
        appSettings.AspectRatio   = 1.250F;
        appSettings.LookupDir     = @"C:\Temp";
        appSettings.AutoSaveTime  = 10;
        appSettings.ShowStatusBar = true;

        // Save the new settings.
        appSettings.Close();
    }
}


Visual C++

using namespace System;
using namespace System::IO;
using namespace System::Security::Permissions;

// Store and retrieve application settings.
ref class AppSettings
{
private:
   static String^ fileName =  "AppSettings#@@#.dat";
   float aspectRatio;
   String^ lookupDir;
   int autoSaveTime;
   Boolean showStatusBar;

public:

   property float AspectRatio
   {
      float get()
      {
         return aspectRatio;
      }

      void set( float value )
      {
         aspectRatio = value;
      }

   }

   property String^ LookupDir
   {
      String^ get()
      {
         return lookupDir;
      }

      void set( String^ value )
      {
         lookupDir = value;
      }

   }

   property int AutoSaveTime
   {
      int get()
      {
         return autoSaveTime;
      }

      void set( int value )
      {
         autoSaveTime = value;
      }

   }

   property Boolean ShowStatusBar
   {
      Boolean get()
      {
         return showStatusBar;
      }

      void set( Boolean value )
      {
         showStatusBar = value;
      }

   }
   AppSettings()
   {

      // Create default application settings.
      aspectRatio = 1.3333F;
      lookupDir =  "C:\\AppDirectory";
      autoSaveTime = 30;
      showStatusBar = false;
      if ( File::Exists( fileName ) )
      {

         BinaryReader^ binReader = gcnew BinaryReader( File::Open( fileName, FileMode::Open ) );
         try
         {


            // If the file is not empty,
            // read the application settings.
            // First read 4 bytes into a buffer to
            // determine if the file is empty.
            array<Byte>^testArray = gcnew array<Byte>(3);
            int count = binReader->Read(testArray, 0, 3);
            if ( count != -1 )
            {

               // Reset the position in the stream to zero.
               binReader->BaseStream->Seek(0, SeekOrigin::Begin);

               aspectRatio = binReader->ReadSingle();
               lookupDir = binReader->ReadString();
               autoSaveTime = binReader->ReadInt32();
               showStatusBar = binReader->ReadBoolean();
               return;
            }
         }
         // If the end of the stream is reached before reading
         // the four data values, ignore the error and use the
         // default settings for the remaining values.
         catch ( EndOfStreamException^ e )
         {
            Console::WriteLine( "{0} caught and ignored. "
            "Using default values.", e->GetType()->Name );
         }
         finally
         {
            binReader->Close();
         }


      }
   }


   // Create a file and store the application settings.
   void Close()
   {

      BinaryWriter^ binWriter = gcnew BinaryWriter( File::Open( fileName, FileMode::Create ) );
      try
      {
         binWriter->Write( aspectRatio );
         binWriter->Write( lookupDir );
         binWriter->Write( autoSaveTime );
         binWriter->Write( showStatusBar );
      }
      finally
      {
         binWriter->Close();
      }


   }

};

int main()
{

   // Load application settings.
   AppSettings^ appSettings = gcnew AppSettings;
   array<Object^>^someObject = {appSettings->AspectRatio.ToString(),appSettings->LookupDir,appSettings->AutoSaveTime.ToString(),appSettings->ShowStatusBar.ToString()};
   Console::WriteLine( "App settings:\nAspect Ratio: {0}, "
   "Lookup directory: {1},\nAuto save time: {2} minutes, "
   "Show status bar: {3}\n", someObject );

   // Change the settings.
   appSettings->AspectRatio = 1.250F;
   appSettings->LookupDir =  "C:\\Temp";
   appSettings->AutoSaveTime = 10;
   appSettings->ShowStatusBar = true;

   // Save the new settings.
   appSettings->Close();
}



Version Information

.NET Framework

Supported in: 4, 3.5, 3.0, 2.0, 1.1, 1.0

.NET Framework Client Profile

Supported in: 4, 3.5 SP1

Portable Class Library

Supported in: Portable Class Library
Platforms

Windows 7, Windows Vista SP1 or later, Windows XP SP3, Windows XP SP2 x64 Edition, Windows Server 2008 (Server Core not supported), Windows Server 2008 R2 (Server Core supported with SP1 or later), Windows Server 2003 SP2

The .NET Framework does not support all versions of every platform. For a list of the supported versions, see .NET Framework System Requirements.
Thread Safety

Any public static (Shared in Visual Basic) members of this type are thread safe. Any instance members are not guaranteed to be thread safe.
See Also

Reference

Other Resources

Community Content

Jason Williams
WARNING: This takes ownership of any stream given to it

The BinaryWriter will take ownership of any stream that you pass to it: When disposed, it will also dispose the stream. This means that the following will fail:

MemoryStream m = new MemoryStream();
using (BinaryWriter writer = new BinaryWriter(m))
{
  ...
}                         // "m" gets secretly disposed here

long pos = m.Position;    // ObjectDisposedException
m.Write(...);             // ObjectDisposedException