Listing 2

using namespace System;
using namespace System::IO;

void Copy(TextReader^ inStream, TextWriter^ outStream);

int main(array<String^>^ argv)
{
  if (argv->Length != 2)
  {
    Console::WriteLine("Two arguments are needed.");
/*1*/                  Environment::Exit(1);
  }

  try
  {
/*2a*/    FileStream^ inFile = gcnew FileStream(argv[0], FileMode::Open);
/*2b*/    StreamReader^ inStream = gcnew StreamReader(inFile);
/*2c*///  StreamReader^ inStream = File::OpenText(argv[0]);

    Console::WriteLine("CanRead is {0}, CanWrite is {1}",
      inFile->CanRead, inFile->CanWrite);

/*3*/   StreamWriter^ outStream = File::CreateText(argv[1]);
/*4*/   Copy(inStream, outStream);
/*5*/   outStream->Write("{0} * {1} = {2}\n", 10, 5, 10 * 5);
    inStream->Close();
    outStream->Close();
  }

/*6*/ catch (FileNotFoundException^ ex)
  {
    Console::WriteLine(ex->Message);
  }

/*7*/ catch (IOException^ ex)
  {
    Console::WriteLine(ex);
  }
}

/*8*/
void Copy(TextReader^ inStream, TextWriter^ outStream) 
{
  int c;

  while ((c = inStream->Read()) != -1)
  {
    outStream->Write(static_cast<wchar_t>(c));
  }
}