Escaping command line arguments in C# for Urls and Local and Network Paths

自古美人都是妖i 提交于 2019-12-13 05:56:50

问题


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); 

回答1:


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.




回答2:


“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!";


来源:https://stackoverflow.com/questions/15932279/escaping-command-line-arguments-in-c-sharp-for-urls-and-local-and-network-paths

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!