Экранирование аргументов командной строки в C# для URL-адресов, локальных и сетевых путей

Как предоставить строку ввода с автоматическим выходом в консольное приложение?

Я имею в виду внутри моего кода, я могу сделать

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. Я старался

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

2 ответа

Решение

Требование о побеге \ внутри строки, если она не является дословной строкой (начинающейся с @) является функцией C#. Когда вы запускаете приложение из консоли, вы находитесь за пределами C#, и консоль не учитывает \ быть особенным персонажем, так C:\test> myapplication.exe "C:\temp\january" буду работать.

Изменить: мой оригинальный пост "C:\temp\january\" выше; Тем не менее, командная строка Windows, кажется, также обрабатывать \ как побег, но только когда перед "так, чтобы команда прошла C:\temp\january" к заявке. Спасибо @zimdanen за указание на это.

Обратите внимание, что все, что вы помещаете между кавычками в C#, является представлением строки; фактическая строка может отличаться - например, \\ представляет собой один \, Если вы используете другие средства для ввода строк в программу, такие как аргументы командной строки или чтение из файла, строки не должны следовать правилам C# для строковых литералов. Командная строка имеет разные правила представления, в которых \ представляет себя.

"Префикс" @ "позволяет использовать ключевые слова в качестве идентификаторов, что полезно при взаимодействии с другими языками программирования. Символ @ на самом деле не является частью идентификатора, поэтому идентификатор может рассматриваться в других языках как обычный идентификатор без префикса. Идентификатор с префиксом @ называется дословным идентификатором. Использование префикса @ для идентификаторов, которые не являются ключевыми словами, разрешено, но настоятельно не рекомендуется из-за стиля ".

  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 = @"Сентил Кумар, Нортон Стэнли и Паван Рао!";

    MessageBox.Show(ThreeIdiots);
    

вместо

string ThreeIdiots = @"Senthil Kumar,\n   Norton Stanley,and Pavan Rao!";
Другие вопросы по тегам