今天測試的時候無意間發現,開啟通過寫登錄檔關聯了程式的檔案,如果檔名中存在空格,則無法通過雙擊開啟。
經測試發現,原來是在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...