В дополнение к хорошему и чисто управляемому решению на Earwicker , для полноты можно отметить, что Windows также предоставляет CommandLineToArgvW
для разбиения строки на массив строк:
LPWSTR *CommandLineToArgvW( LPCWSTR lpCmdLine, int *pNumArgs);
Разбирает строку командной строки Unicode и возвращает массив указателей на аргументы командной строки, а также количество таких аргументов, которое аналогично стандартным значениям времени выполнения argv и argc C.
blockquote>Пример вызова этого API из C # и распаковки результирующего массива строк в управляемый код можно найти на странице « Преобразование строки командной строки в Args [] с использованием CommandLineToArgvW () API ». Ниже приведена несколько более простая версия того же кода:
[DllImport("shell32.dll", SetLastError = true)] static extern IntPtr CommandLineToArgvW( [MarshalAs(UnmanagedType.LPWStr)] string lpCmdLine, out int pNumArgs); public static string[] CommandLineToArgs(string commandLine) { int argc; var argv = CommandLineToArgvW(commandLine, out argc); if (argv == IntPtr.Zero) throw new System.ComponentModel.Win32Exception(); try { var args = new string[argc]; for (var i = 0; i < args.Length; i++) { var p = Marshal.ReadIntPtr(argv, i * IntPtr.Size); args[i] = Marshal.PtrToStringUni(p); } return args; } finally { Marshal.FreeHGlobal(argv); } }