Аргументы командой строки: ошибка из-за экранирования \"
Впервые столкнулся с подобной проблемой, а потому стражду помощи. Быть может, кто-нибудь с этим сталкивался и подскажет что делать...
Ситуация следующая: на вход программе подаются пути к двум каталогам. По всем правилам, эти пути заключаются в кавычки. Однако, в конце пути может оказаться слэш \. И в этом случае, и он и кавычка бесследно исчезают, в результате кусок пути второй папки цепляется к первой.
Вопрос: можно ли это как-нибудь исправить? Если родными средствами не получается, можно ли получить изначальную строку аргументов, до того, как ее обработал фреймворк?
Командную строку получить можно: Environment.CommandLine.
Ставь двойной слэш или обратный.
Код:
public static List<string> GetCommandLineArguments()
{
var result = new List<string>(16);
var sb = new StringBuilder(Environment.CommandLine.Length);
var waitQuote = false;
var fileName = true;
foreach (var c in Environment.CommandLine)
{
if (c == '"')
{
waitQuote = !waitQuote;
continue;
}
if (!waitQuote && c == ' ')
{
if (fileName)
fileName = false;
else
result.Add(sb.ToString());
sb.Clear();
continue;
}
sb.Append(c);
}
if (sb.Length != 0)
result.Add(sb.ToString());
return result;
}
{
var result = new List<string>(16);
var sb = new StringBuilder(Environment.CommandLine.Length);
var waitQuote = false;
var fileName = true;
foreach (var c in Environment.CommandLine)
{
if (c == '"')
{
waitQuote = !waitQuote;
continue;
}
if (!waitQuote && c == ' ')
{
if (fileName)
fileName = false;
else
result.Add(sb.ToString());
sb.Clear();
continue;
}
sb.Append(c);
}
if (sb.Length != 0)
result.Add(sb.ToString());
return result;
}