Hybird3D

乔捷的技术博客

博客园 首页 新随笔 联系 订阅 管理

把一个把字符串分解成命令行参数是很常见的操作,一直很纳闷为什么.net没有提供相关的功能,自己写一个又觉得麻烦。幸好windows提供了一个API来干这个事情。不过这个API调用起来颇为麻烦,google了一下才找到方法。代码贴上来,方便后来人使用。

 

代码如下:

using System;
using System.Runtime.InteropServices;
using System.Text;

///
 <summary>
/// string extension for split command line to string[]
/// </summary>
public static class CmdLineExtension
{

    
public static string[] SplitArgs(this string cmd)
    {
        
int count;
        var ret 
= CommandLineToArgvW(cmd, out count);

        
if(ret == IntPtr.Zero)
            
throw new ArgumentException("Unable to split argument.");
        
try
        {
            var results 
= new string[count];

            
for(int i = 0; i < count; i++)
                results[i] 
= Marshal.PtrToStringUni(Marshal.ReadIntPtr(ret, i * IntPtr.Size));
            
return results;
        }
        
finally
        {
            LocalFree(ret);
        }
    }

    [DllImport(
"shell32.dll", SetLastError = true)]
    
static extern IntPtr CommandLineToArgvW([MarshalAs(UnmanagedType.LPWStr)]string cmd, out int count);

    [DllImport(
"kernel32.dll")]
    
static extern IntPtr LocalFree(IntPtr mem);
}

 

 

posted on 2011-01-12 13:05  qiaojie  阅读(686)  评论(3编辑  收藏  举报