C#关联程序的文件路径中存在空格的问题解决

来源:互联网 发布:排序算法总结 编辑:程序博客网 时间:2024/05/01 01:32

今天测试的时候无意间发现,打开通过写注册表关联了程序的文件,如果文件名中存在空格,则无法通过双击打开。
经测试发现,原来是在Main方法入口点传入的参数为string[] 类型,当传入带空格的路径时,会被分解成多个字符串存入string[] 数组中。由于Main的参数由注册表关联后直接传入的,所以我没法直接修改传入的字符串参数,又不能避免文件路径中不包含空格。该怎么解决这个问题呢?我开始研究注册表的文件关联。这篇文章给我了很大的帮助:深入注册表之文件关联——文件关联认识篇
先贴上我所用的文件关联的代码:

///<summary>  /// RegisterFileType使文件类型与对应的图标及应用程序关联起来。 /// </summary>  public static void RegisterFileType(FileTypeRegInforegInfo) {    if(RegistryHelper.FileTypeRegistered(regInfo.ExtendName))    {       return;   }    string relationName = regInfo.ExtendName.Substring(1,regInfo.ExtendName.Length-1).ToUpper() + "_FileType" ;   RegistryKey fileTypeKey = Registry.ClassesRoot.CreateSubKey(regInfo.ExtendName);  fileTypeKey.SetValue("" ,relationName);  fileTypeKey.Close();  RegistryKey relationKey = Registry.ClassesRoot.CreateSubKey(relationName);  relationKey.SetValue("" ,regInfo.Description);  RegistryKey iconKey = relationKey.CreateSubKey("DefaultIcon");  iconKey.SetValue("" ,regInfo.IcoPath);    RegistryKey shellKey = relationKey.CreateSubKey("Shell");  RegistryKey openKey = shellKey.CreateSubKey("Open");  RegistryKey commandKey = openKey.CreateSubKey("Command");    commandKey.SetValue("" ,regInfo.ExePath + " %1") ;  relationKey.Close(); }

结合那篇文章的解释,再看我的代码,很容易就能理解,文件所关联的程序及程序入口就在Shell→Open→Command键值中,其中regInfo.ExePath为关联程序存放的位置,而%1就是要传入关联程序的参数,也就是要打开的文件路径。明白这个之后,问题便很容易解决了。因为传给Main的字符串参数只要加上双引号“”,便不会被分隔。所以将参数%1用双引号括起来问题便解决。修改如下:

 commandKey.SetValue("" ,regInfo.ExePath + " \"%1\"") ;

因为本身就是在引号内,所以加了个转义字符\ 。经测试,完全正确,问题解决!

0 0
原创粉丝点击