Listing 5

using namespace System;
using namespace System::IO;

int main()
{
/*1*/ Stream^ fs = gcnew FileStream("Io05.dat", 
    FileMode::Create, FileAccess::ReadWrite);
  BinaryWriter^ bw = gcnew BinaryWriter(fs);
  BinaryReader^ br = gcnew BinaryReader(fs);

/*2*/ Console::WriteLine("CanRead is {0}, CanWrite is {1}, CanSeek is {2}",
    fs->CanRead, fs->CanWrite, fs->CanSeek);
    
/*3*/ Console::WriteLine("Position at start is {0}", fs->Position);
  bw->Write(true);

/*4*/ long long pos1 = fs->Position;
  bw->Write(1234);
  bw->Write(123.456);

  Console::WriteLine("Position at end is {0}", fs->Position);

/*5*/ fs->Position = pos1;
  bw->Write(5678);    // overwrite 1234 with 5678

/*6*/ fs->Position = 0;
  bw->Write(false); // overwrite true with false

/*7*/ fs->Seek(0, SeekOrigin::Begin);
  Console::WriteLine("bool:   " + br->ReadBoolean());

/*8*/ fs->Seek(-1, SeekOrigin::Current);
  Console::WriteLine("bool:   " + br->ReadBoolean());
  Console::WriteLine("int:    " + br->ReadInt32());

/*9*/ fs->Seek(-8, SeekOrigin::End);
  Console::WriteLine("double: " + br->ReadDouble());

  bw->Close();
  br->Close();
  fs->Close();
}