Writes primitive types in binary to a stream and supports writing strings in a specific encoding.
System.IO.BinaryWriter
Namespace: System.IO
Assembly: mscorlib (in mscorlib.dll)
<SerializableAttribute> _ <ComVisibleAttribute(True)> _ Public Class BinaryWriter _ Implements IDisposable
[SerializableAttribute] [ComVisibleAttribute(true)] public class BinaryWriter : IDisposable
[SerializableAttribute] [ComVisibleAttribute(true)] public ref class BinaryWriter : IDisposable
[<SerializableAttribute>] [<ComVisibleAttribute(true)>] type BinaryWriter = class interface IDisposable end
The BinaryWriter type exposes the following members.
| Name | Description | |
|---|---|---|
|
BinaryWriter() | Initializes a new instance of the BinaryWriter class that writes to a stream. |
|
BinaryWriter(Stream) | Initializes a new instance of the BinaryWriter class based on the supplied stream and using UTF-8 as the encoding for strings. |
|
BinaryWriter(Stream, Encoding) | Initializes a new instance of the BinaryWriter class based on the supplied stream and a specific character encoding. |
| Name | Description | |
|---|---|---|
|
BaseStream | Gets the underlying stream of the BinaryWriter. |
| Name | Description | |
|---|---|---|
|
Close | Closes the current BinaryWriter and the underlying stream. |
|
Dispose() | Releases all resources used by the current instance of the BinaryWriter class. |
|
Dispose(Boolean) | Releases the unmanaged resources used by the BinaryWriter and optionally releases the managed resources. |
|
Equals(Object) | Determines whether the specified Object is equal to the current Object. (Inherited from Object.) |
|
Finalize | Allows an object to try to free resources and perform other cleanup operations before it is reclaimed by garbage collection. (Inherited from Object.) |
|
Flush | Clears all buffers for the current writer and causes any buffered data to be written to the underlying device. |
|
GetHashCode | Serves as a hash function for a particular type. (Inherited from Object.) |
|
GetType | Gets the Type of the current instance. (Inherited from Object.) |
|
MemberwiseClone | Creates a shallow copy of the current Object. (Inherited from Object.) |
|
Seek | Sets the position within the current stream. |
|
ToString | Returns a string that represents the current object. (Inherited from Object.) |
|
Write(Boolean) | Writes a one-byte Boolean value to the current stream, with 0 representing false and 1 representing true. |
|
Write(Byte) | Writes an unsigned byte to the current stream and advances the stream position by one byte. |
|
Write(Byte[]) | Writes a byte array to the underlying stream. |
|
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. |
|
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. |
|
Write(Decimal) | Writes a decimal value to the current stream and advances the stream position by sixteen bytes. |
|
Write(Double) | Writes an eight-byte floating-point value to the current stream and advances the stream position by eight bytes. |
|
Write(Int16) | Writes a two-byte signed integer to the current stream and advances the stream position by two bytes. |
|
Write(Int32) | Writes a four-byte signed integer to the current stream and advances the stream position by four bytes. |
|
Write(Int64) | Writes an eight-byte signed integer to the current stream and advances the stream position by eight bytes. |
|
Write(SByte) | Writes a signed byte to the current stream and advances the stream position by one byte. |
|
Write(Single) | Writes a four-byte floating-point value to the current stream and advances the stream position by four bytes. |
|
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. |
|
Write(UInt16) | Writes a two-byte unsigned integer to the current stream and advances the stream position by two bytes. |
|
Write(UInt32) | Writes a four-byte unsigned integer to the current stream and advances the stream position by four bytes. |
|
Write(UInt64) | Writes an eight-byte unsigned integer to the current stream and advances the stream position by eight bytes. |
|
Write(Byte[], Int32, Int32) | Writes a region of a byte array to the current stream. |
|
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. |
|
Write7BitEncodedInt | Writes a 32-bit integer in a compressed format. |
| Name | Description | |
|---|---|---|
|
Null | Specifies a BinaryWriter with no backing store. |
|
OutStream | Holds the underlying stream. |
| Name | Description | |
|---|---|---|
|
IDisposable.Dispose | Performs application-defined tasks associated with freeing, releasing, or resetting unmanaged resources. |
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.
The following code example demonstrates how to store and retrieve application settings in a file.
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
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(); } }
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(); }
.NET Framework
Supported in: 4, 3.5, 3.0, 2.0, 1.1, 1.0.NET Framework Client Profile
Supported in: 4, 3.5 SP1Portable Class Library
Supported in: Portable Class LibraryWindows 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.
Reference
Other Resources
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