本文介绍了将字符串分割包含命令行参数转换成字符串[]在C#的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
我有一个包含命令行参数传递到另一个可执行一个字符串,我需要提取字符串[]包含C#会,如果已经在命令中指定的命令以同样的方式对各个参数-线。字符串[]将通过反射执行另一个组件入口点时使用。
对此有一个标准的功能?或者是有正确分割参数preferred法(正则表达式?)?它必须处理',可能包含正确的空格分隔字符串,所以我不能随便拆的
例字符串:
字符串parameterString = @/ src目录:C:\\ tmp目录\\某个文件夹\\子文件夹/users:\"\"[email protected]任务: SomeTask,一些其他的任务,-someParam富;
结果举例:
的String [] = parameterArray新的String [] {
@/ src目录:C:\\ tmp目录\\某个文件夹\\子文件夹,
@/用户:[email protected]
@任务:SomeTask,一些其他的任务
@ - someParam
@富
};
我并不需要一个命令行解析库,只是一种方式来获得的String []应生成。
更新:我不得不改变预期的结果匹配什么是C#实际产生(在分割字符串去除多余的)
解决方案
在除good和 的纯托管的解决方案,它可能是值得一提的,为了完整的缘故,Windows还提供 CommandLineToArgvW
功能分手字符串转换成字符串数组:
An example of calling this API from C# and unpacking the resulting string array in managed code can be found at, "Converting Command Line String to Args[] using CommandLineToArgvW() API." Below is a slightly simpler version of the same code:
[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);
}
}
这篇关于将字符串分割包含命令行参数转换成字符串[]在C#的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!