Не могу передать аргументы-пути в кавычках с backslash в консольную программу на C#
Два аргумента консольной программы представляют из себя пути, оканчивающиеся на backslash и заключенные в кавычки.
program.exe "path1\" "path2\"
В программе эти аргументы из-за оконечных backslash сливаются в один args[0] = C:\path1" C:\path2".
Вид аргументов задается не мной и я не могу изменить их стиль. Как принять пути правильно?
Ответы (1 шт):
Автор решения: aepot
→ Ссылка
Вот есть такой код
class Program
{
[DllImport("kernel32.dll", CharSet = CharSet.Auto)]
private static extern IntPtr GetCommandLine();
static void Main(string[] args)
{
Console.WriteLine("---Environment.CommandLine---");
Console.WriteLine(Environment.CommandLine);
Console.WriteLine("---args[0]---");
Console.WriteLine(args[0]);
Console.WriteLine("---kernel32.dll / GetCommandLine()---");
IntPtr ptr = GetCommandLine();
string commandLine = Marshal.PtrToStringAuto(ptr);
Console.WriteLine(commandLine);
Console.WriteLine("---Parse previous output---");
MatchCollection matches = Regex.Matches(commandLine, @"\""(.+?)\""");
string[] arguments = matches.Select(x => x.Groups[1].Value).Skip(1).ToArray();
foreach (string s in arguments)
Console.WriteLine(s);
Console.ReadKey();
}
}
Если запустить с таким образом
ConsoleApp1.exe "path1\" "path2\"
То получится вот такой вывод
---Environment.CommandLine---
C:\Source\ConsoleApp1\ConsoleApp1\bin\Debug\netcoreapp3.1\ConsoleApp1.dll "path1\" path2\""
---args[0]---
path1" path2"
---kernel32.dll / GetCommandLine()---
"C:\Source\ConsoleApp1\ConsoleApp1\bin\Debug\netcoreapp3.1\ConsoleApp1.exe" "path1\" "path2\"
---Parse previous output---
path1\
path2\
Возможно вам нужен как раз третий способ, как источник данных для того, чтобы распарсить командную строку.