Back to slide -- Keyboard shortcut: 'u'  previous -- Keyboard shortcut: 'p'        Annotated program -- Keyboard shortcut: 't'    io/file-copy/mycopy-error-demo.cs - A file copy program with excessive error handling.Lecture 9 - slide 11 : 30
Program 2

using System;
using System.IO;

public class CopyApp {                              

  public static void Main(string[] args) {
    FileInfo inFile;
    do {                                            
        inFile = new FileInfo(args[0]);             
        if (!inFile.Exists)                         
          args[0] = "some other input file name";
    } while (!inFile.Exists);

    FileInfo outFile;
    do {                                               
        outFile = new FileInfo(args[1]);               
        if (outFile.Exists)                            
          args[1] = "some other output file name";
    } while (outFile.Exists);

    FileStream inStr   = inFile.OpenRead(),
               outStr  = outFile.OpenWrite();
    int c;
    do{
       c = inStr.ReadByte();
       if(c != -1) outStr.WriteByte((byte)c);
       if (StreamFull(outStr))                              
         DreamCommand("Fix some extra room on the disk");   
    } while (c != -1);  

    inStr.Close();
    if (!FileClosed(inStr))                                            
      DreamCommand("Deal with input file which cannot be closed");     

    outStr.Close();                                                    
    if (!FileClosed(outStr))                                           
      DreamCommand("Deal with output file which cannot be closed");
  }



  /* Programming pseudo commands for the sake of this example */

  public static void DreamCommand(string str){
    // Carry out the command str
  }

  public static bool FileClosed(Stream str){
    // Return if the stream str is closed
  }

  public static bool StreamFull(Stream str){
    // Return if the stream str is full
  }    

}