C#關聯程序的文件路徑中存在空格的問題解決

今天測試的時候無意間發現,打開通過寫註冊表關聯了程序的文件,如果文件名中存在空格,則無法通過雙擊打開。
經測試發現,原來是在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\"") ;

因爲本身就是在引號內,所以加了個轉義字符\ 。經測試,完全正確,問題解決!

發佈了27 篇原創文章 · 獲贊 10 · 訪問量 21萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章