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();
    }
}
comments powered by Disqus

Featured

  • Claude AI Gets Yet Another Boost in VS Code 1.128

    The July 8, 2026, Visual Studio Code update expands agent workflows, chat attachments, browser-tab controls, OS-level shortcuts and enterprise telemetry management.

  • TypeScript 7 Arrives to Rock VS Code with Go-Powered Speed

    Microsoft says TypeScript 7, announced July 8, brings native Go performance to VS Code, Visual Studio and other editors.

  • Full-Stack with a Side of Copilot: Building and Deploying an App the AI-Accelerated Way

    In this Q&A, developer and VSLive! speaker Esteban Garcia explains how GitHub Copilot can accelerate the full software development lifecycle -- from architecture and code to tests, CI/CD, and Azure deployment -- and how to use it as a repeatable engineering workflow rather than just a faster autocomplete tool.

  • VS Code 1.127 Further Integrates Advanced Browser-AI Tech

    Microsoft's July 1 Visual Studio Code update continues a recent push to make the editor's integrated browser a more capable development surface -- and a more useful tool for AI agents.

Subscribe on YouTube