【问题标题】:Escaping command line arguments in C# for Urls and Local and Network Paths在 C# 中为 Urls 以及本地和网络路径转义命令行参数
【发布时间】:2013-04-02 16:10:31
【问题描述】:

如何向控制台应用程序提供自动转义的输入字符串?

我的意思是在我的代码中,我可以做到

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

如何为 myFolder 提供值而无需通过命令行手动对其进行转义?

如果可能的话,我想避免这样调用这个应用程序:

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

编辑: 相反,如果可能的话,我更喜欢这样调用应用程序

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

谢谢。

编辑:

这实际上是用于调用 Sharepoint Web 服务的控制台应用程序。我试过了

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

【问题讨论】:

  • 您已说明如何不想调用该应用程序。您究竟想如何调用该应用程序?
  • 你为什么要在命令行中 c#-escape 输入?这没有任何意义——命令行不是 c#
  • 也许如果你尝试传递你的论点,你会发现没有必要逃避任何事情
  • @Steve 请看我的更新。

标签: c# command-line-arguments verbatim-string


【解决方案1】:

如果字符串不是逐字字符串(以@ 开头的字符串),则在字符串中转义\ 的要求是C# 功能。当您从控制台启动应用程序时,您处于 C# 之外,并且控制台不会将 \ 视为特殊字符,因此 C:\test> myapplication.exe "C:\temp\january" 将起作用。

编辑:我原来的帖子上面有"C:\temp\january\";但是,Windows 命令行似乎也将\ 作为转义字符处理——但仅在" 前面时,该命令会将C:\temp\january" 传递给应用程序。感谢@zimdanen 指出这一点。

请注意,C# 中引号之间的任何内容都是字符串的表示;实际的字符串可能不同 - 例如,\\ 表示单个 \。如果您使用其他方式将字符串获取到程序中,例如命令行参数或通过从文件中读取,则字符串不需要遵循 C# 的字符串文字规则。命令行有不同的表示规则,\ 代表它自己。

【讨论】:

  • 这并不完全正确,因为将 "C:\temp\january\" 作为 arg 将作为 C:\temp\january" 进入应用程序 - \" 被视为转义引号。
  • @zimdanen:据我所知,不在标准的 Windows shell 中 - 因为 `\` 是 Windows 上的路径分隔符,将其用作转义字符会很麻烦。
  • 我现在正在研究一个 - 我的代码会立即打印出 args (Console.WriteLine(string.Join(Environment.NewLine, args));),并且使用输入 ...\Log\Log\bin\Debug>Log.exe "c:\test\",我得到输出 c:\test"
  • @zimdanen:我的立场是正确的;看起来 \ 只有在 " ... 前面时才充当转义字符:S 我已经更新了帖子(并且我不喜欢 cmd。)
【解决方案2】:

“前缀“@”允许使用关键字作为标识符,这在与其他编程语言交互时很有用。字符 @ 实际上不是标识符的一部分,因此标识符在其他语言中可能被视为普通标识符,没有前缀。带有@ 前缀的标识符称为逐字标识符。允许对不是关键字的标识符使用 @ 前缀,但出于风格问题,强烈建议不要使用。”

  1. 您可以使用带有@符号的c#保留字之一

例如:-

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

2.特别是在使用文件路径时的字符串之前

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

而不是

string filepath = "D:\\SENTHIL-DATA\\myprofile.txt";
  1. 对于多行文本

    string ThreeIdiots = @"Senthil Kumar, 诺顿斯坦利, 还有帕万饶!”;

    MessageBox.Show(ThreeIdiots);
    

而不是

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

【讨论】:

    猜你喜欢
    • 2011-07-27
    • 2011-04-27
    • 1970-01-01
    • 2022-10-23
    • 2013-01-23
    • 2014-05-22
    • 1970-01-01
    • 2014-04-12
    • 2015-06-13
    相关资源
    最近更新 更多