Zachieve Low-Impact Reuse: C# : Add Command-Line Parameters: Listing 2
Adding new features means adding command line parameters to specify what needs to be done. This version of ClipboardWriter includes the code to process command-line parameters. Every console application will use some command-line parameters, so this is an excellent candidate to create some reusable components.
/// <summary>
/// Clipboard Writer class.
/// </summary>
class ClipboardWriter
{
public bool Silent
{
get;
set;
}
public TextReader InputStream
{
get;
set;
}
public string OutputFile
{
get;
set;
}
public ClipboardWriter()
{
InputStream = Console.In;
}
private void processStream()
{
System.Text.StringBuilder allStrs =
new System.Text.StringBuilder();
string str;
while (null != (str = InputStream.ReadLine()))
{
// Store it:
allStrs.Append(str);
allStrs.Append("\r\n");
// Pipe it to the output:
if (!Silent)
System.Console.WriteLine(str);
}
if (!string.IsNullOrEmpty(OutputFile))
{
TextWriter tOut = new System.IO.StreamWriter(
OutputFile);
tOut.Write(allStrs.ToString());
tOut.Close();
}
System.Windows.Forms.Clipboard.SetDataObject(
allStrs.ToString(), true);
}
/// <summary>
/// The main entry point for the application.
/// </summary>
[STAThread]
static void Main(string[] args)
{
// Create the processor
ClipboardWriter processor = new ClipboardWriter();
// Handle all parameters
for (int i = 0; i < args.Length; i++ )
{
string standardArg = args[i].ToLower();
if (standardArg == "-s")
processor.Silent = true;
else if (standardArg == "-w")
{
i++;
string outputFile = args[i];
string dir = Path.GetDirectoryName(outputFile);
if ((!string.IsNullOrEmpty(dir))
&& (!Directory.Exists(dir)))
{
Console.Error.WriteLine(
"Error: Specified Output Directory
doesn't exist");
return;
}
processor.OutputFile = outputFile;
}
else if (standardArg == "-r")
{
i++;
string fName = args[i];
if (File.Exists(fName))
{
processor.InputStream = new
StreamReader(fName);
}
else
{
Console.Error.WriteLine(
"Error: Input file does not exist");
return;
}
}
else
{
Console.Error.WriteLine("Invalid Input");
return;
}
}
// Do the work
processor.processStream();
}
}