Экранирование аргументов командной строки в 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# для строковых литералов. Командная строка имеет разные правила представления, в которых \
представляет себя.
"Префикс" @ "позволяет использовать ключевые слова в качестве идентификаторов, что полезно при взаимодействии с другими языками программирования. Символ @ на самом деле не является частью идентификатора, поэтому идентификатор может рассматриваться в других языках как обычный идентификатор без префикса. Идентификатор с префиксом @ называется дословным идентификатором. Использование префикса @ для идентификаторов, которые не являются ключевыми словами, разрешено, но настоятельно не рекомендуется из-за стиля ".
- Вы можете использовать одно из зарезервированных слов C# с символом @
например: -
string @int = "senthil kumar";
string @class ="MCA";
2. Перед строкой, особенно при использовании путей к файлам
string filepath = @"D:\SENTHIL-DATA\myprofile.txt";
вместо
string filepath = "D:\\SENTHIL-DATA\\myprofile.txt";
Для многослойного текста
string ThreeIdiots = @"Сентил Кумар, Нортон Стэнли и Паван Рао!";
MessageBox.Show(ThreeIdiots);
вместо
string ThreeIdiots = @"Senthil Kumar,\n Norton Stanley,and Pavan Rao!";