0

How do I provide an input string with automatic escaping to a console application?

I mean inside my code, I can do

public static void main(string[] args)
{
     string myURL; 
     myFolder = @"C:\temp\january\";  //just for testing
     myFolder = args[0]; // I want to do this eventually
}

How can I provide values to myFolder without me having to escape it manually via command line?

If possible, I want to avoid calling this app like this:

C:\test> myapplication.exe "C:\\temp\\january\\" 

EDIT: instead I'd prefer calling the app like this if possible

    C:\test> myapplication.exe @"C:\temp\january\" 

Thank you.

EDIT:

This is actually for a console application that calls Sharepoint Web services. I tried

  string SourceFileFullPath, SourceFileName, DestinationFolder, DestinationFullPath;

            //This part didn't work. Got Microsoft.SharePoint.SoapServer.SoapServerException
            //SourceFileFullPath = args[0]; // C:\temp\xyz.pdf
            //SourceFileName = args[1];     // xyz.pdf
            //DestinationFolder = args[2]; // "http://myserver/ClientX/Performance" Reports


            //This worked.   
            SourceFileFullPath = @"C:\temp\TestDoc2.txt";
            SourceFileName = @"TestDoc2.txt";
            DestinationFolder = @"http://myserver/ClientX/Performance Reports";
            DestinationFullPath = string.Format("{0}/{1}", DestinationFolder, SourceFileName); 
FMFF
  • 1,652
  • 4
  • 32
  • 62

2 Answers2

3

The requirement to escape \ inside a string if it is not a verbatim string (one that starts with @) is a C# feature. When you start your application from a console, you are outside of C#, and the console does not consider \ to be a special character, so C:\test> myapplication.exe "C:\temp\january" will work.

Edit: My original post had "C:\temp\january\" above; however, the Windows command line seems to also handle \ as an escape character - but only when in front of a ", so that command would pass C:\temp\january" to the application. Thanks to @zimdanen for pointing this out.

Please note that whatever you put between quotes in C# is a representation of a string; the actual string may be different - for instance, \\ represents a single \. If you use other means to get strings into the program, such as the command line arguments or by reading from a file, the strings do not need to follow C#'s rules for string literals. The command line has different rules for representation, in which a \ represents itself.

Aasmund Eldhuset
  • 37,289
  • 4
  • 68
  • 81
  • This isn't quite true, because putting `"C:\temp\january\"` as the arg will come in as `C:\temp\january"` to the app - `\"` is treated as an escaped quote. – zimdanen Jun 19 '13 at 13:07
  • @zimdanen: Not in the standard Windows shell, to my knowledge - since `\\` is the path separator on Windows, it would be cumbersome to have it act as an escape character. – Aasmund Eldhuset Jun 19 '13 at 13:13
  • I'm working on one now - my code prints out the args right away (`Console.WriteLine(string.Join(Environment.NewLine, args));`), and, using the input `...\Log\Log\bin\Debug>Log.exe "c:\test\"`, I get the output `c:\test"`. – zimdanen Jun 19 '13 at 13:18
  • 1
    @zimdanen: I stand corrected; it looks like \ acts as an escape character only when in front of a " ... :S I've updated the post (and my dislike for cmd.) – Aasmund Eldhuset Jun 19 '13 at 13:23
0

“The prefix “@” enables the use of keywords as identifiers, which is useful when interfacing with other programming languages. The character @ is not actually part of the identifier, so the identifier might be seen in other languages as a normal identifier, without the prefix. An identifier with an @ prefix is called a verbatim identifier. Use of the @ prefix for identifiers that are not keywords is permitted, but strongly discouraged as a matter of style.”

  1. You can use one of the reserved words of c# with the @ symbol

ex:-

  string @int = "senthil kumar";
    string @class ="MCA";

2.Before a string specially when using the file paths

string filepath = @"D:\SENTHIL-DATA\myprofile.txt";

instead of

string filepath = "D:\\SENTHIL-DATA\\myprofile.txt";
  1. For a Multi lined text

    string ThreeIdiots = @"Senthil Kumar, Norton Stanley, and Pavan Rao!";

    MessageBox.Show(ThreeIdiots);
    

instead of

string ThreeIdiots = @"Senthil Kumar,\n   Norton Stanley,and Pavan Rao!";
Akshay Joy
  • 1,765
  • 1
  • 14
  • 23