本文介绍了将字符串分割包含命令行参数转换成字符串[]在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#的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!

09-06 06:29