我的字符串格式如下:
"arg1" "arg2" "arg3" ... "argx"
我将使用此字符串作为我的程序命令行参数的string[]
。
如何将此字符串转换为字符串数组?
答案 0 :(得分:0)
答案 1 :(得分:0)
自己实现所有逃避并不容易,特别是CLR为你做的事情。
所以,你最好看看CLR来源。 It mentions CommandLineToArgvW
api,其中包含nice documentation。
但我们是C#家伙,必须search this function signature here。幸运的是,它有一个很好的样本(我的造型):
internal static class CmdLineToArgvW
{
public static string[] SplitArgs(string unsplitArgumentLine)
{
int numberOfArgs;
var ptrToSplitArgs = CommandLineToArgvW(unsplitArgumentLine, out numberOfArgs);
// CommandLineToArgvW returns NULL upon failure.
if (ptrToSplitArgs == IntPtr.Zero)
throw new ArgumentException("Unable to split argument.", new Win32Exception());
// Make sure the memory ptrToSplitArgs to is freed, even upon failure.
try
{
var splitArgs = new string[numberOfArgs];
// ptrToSplitArgs is an array of pointers to null terminated Unicode strings.
// Copy each of these strings into our split argument array.
for (var i = 0; i < numberOfArgs; i++)
splitArgs[i] = Marshal.PtrToStringUni(
Marshal.ReadIntPtr(ptrToSplitArgs, i * IntPtr.Size));
return splitArgs;
}
finally
{
// Free memory obtained by CommandLineToArgW.
LocalFree(ptrToSplitArgs);
}
}
[DllImport("shell32.dll", SetLastError = true)]
private static extern IntPtr CommandLineToArgvW(
[MarshalAs(UnmanagedType.LPWStr)] string lpCmdLine,
out int pNumArgs);
[DllImport("kernel32.dll")]
private static extern IntPtr LocalFree(IntPtr hMem);
}
PS。注意,该可执行文件名应该是该行中的第一个参数。