C 關聯程式的檔案路徑中存在空格的問題解決

2021-06-29 10:25:17 字數 1598 閱讀 1246

今天測試的時候無意間發現,開啟通過寫登錄檔關聯了程式的檔案,如果檔名中存在空格,則無法通過雙擊開啟。

經測試發現,原來是在main方法入口點傳入的引數為string 型別,當傳入帶空格的路徑時,會被分解成多個字串存入string 陣列中。由於main的引數由登錄檔關聯後直接傳入的,所以我沒法直接修改傳入的字串引數,又不能避免檔案路徑中不包含空格。該怎麼解決這個問題呢?我開始研究登錄檔的檔案關聯。這篇文章給我了很大的幫助:深入登錄檔之檔案關聯——檔案關聯認識篇

先貼上我所用的檔案關聯的**:

////// registerfiletype使檔案型別與對應的圖示及應用程式關聯起來。 

///

public static void registerfiletype(filetypereginforeginfo)

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\"") ;
因為本身就是在引號內,所以加了個轉義字元\ 。經測試,完全正確,問題解決!

C 關聯程式和檔案

一 關聯 關聯程式和型別 private void regfileext else catch exception ex ex.message view code 二 注釋 1 前面是路徑,後面的 1就是可變引數,代表任意用 x.exe來執行的程式 可傳至於exe程式 2 string comman...

VC中建立程式的關聯檔案

當我們雙擊乙個txt檔案的圖示時,系統就會用記事本開啟該檔案,這就是程式的關聯。那我們自己編寫的程式如何建立關聯檔案呢?第一步 設定自己程式關聯的檔案型別 開啟資源下的string table,找到其中的idr mainframe,雙擊該項,修改它的值,設它原來的值是 texteditor n nt...

VC中建立程式的關聯檔案

當我們雙擊乙個txt檔案的圖示時,系統就會用記事本開啟該檔案,這就是程式的關聯。那我們自己編寫的程式如何建立關聯檔案呢?第一步 設定自己程式關聯的檔案型別 開啟資源下的string table,找到其中的idr mainframe,雙擊該項,修改它的值,設它原來的值是 texteditor n nt...