我在C#中創建了一個文件編輯器,並且我可以使用工具欄中的「打開」按鈕打開文件,我還將正確的文件類型關聯到程序,所以當我單擊帶有擴展名的文件時* .nlp程序打開正確,但不打開文件本身(這是相當合乎邏輯的,因爲我還沒有實現它)打開關聯文件
現在是我的問題,我該如何實現這樣的事情?我想要打開並加載文件時,我點擊它。
(順便說一句,該文件只是純文本,所以沒有什麼特別的,它的窗戶,如果該事項)
我在C#中創建了一個文件編輯器,並且我可以使用工具欄中的「打開」按鈕打開文件,我還將正確的文件類型關聯到程序,所以當我單擊帶有擴展名的文件時* .nlp程序打開正確,但不打開文件本身(這是相當合乎邏輯的,因爲我還沒有實現它)打開關聯文件
現在是我的問題,我該如何實現這樣的事情?我想要打開並加載文件時,我點擊它。
(順便說一句,該文件只是純文本,所以沒有什麼特別的,它的窗戶,如果該事項)
在Windows中文件關聯存儲和管理在註冊表下HKEY_CLASSES_ROOT
您可以手動執行以下操作或最終編寫一個小的安裝程序,將正確的條目寫入註冊表。
您需要註冊您的分機,然後將其與this document介紹的程序相關聯。另請參閱this doc你的註冊表應該是這樣的:
HKEY_CLASSES_ROOT
.nlp
(Default) = YourProgID//can by anything you want
YourProgID
shell
open
command
(Default) = yourapp.exe %1
現在,他們關鍵看你的回答是指令鍵的%1
。這是打開的文件名,它作爲參數傳遞給你的應用程序。
所以:
static void Main(string[] args)
{
// args will contain your filename
}
似乎沒有成爲直接管理文件關聯一個.NET API,但你可以使用註冊表類用於讀取和寫入您需要的密鑰。
您需要在HKEY_CLASSES_ROOT下創建一個名稱設置爲文件擴展名的密鑰(例如:「.txt」)。將此項的默認值設置爲文件類型的唯一名稱,例如「Acme.TextFile」。然後在名稱設置爲「Acme.TextFile」的HKEY_CLASSES_ROOT下創建另一個鍵。添加一個名爲「DefaultIcon」的子項,並將該項的默認值設置爲包含您希望用於此文件類型的圖標的文件。添加另一個名爲「shell」的兄弟。在「shell」鍵下方,通過資源管理器上下文菜單爲每個希望獲得的操作添加一個鍵,將每個鍵的默認值設置爲可執行文件的路徑,後跟一個空格,「%1」表示路徑到所選文件。
舉例來說,這裏是一個示例註冊表文件中創建的.txt文件,EmEditor中之間的關聯:
Windows註冊表編輯器5.00版
[HKEY_CLASSES_ROOT\.txt]
@="emeditor.txt"
[HKEY_CLASSES_ROOT\emeditor.txt]
@="Text Document"
[HKEY_CLASSES_ROOT\emeditor.txt\DefaultIcon]
@="%SystemRoot%\\SysWow64\\imageres.dll,-102"
[HKEY_CLASSES_ROOT\emeditor.txt\shell]
[HKEY_CLASSES_ROOT\emeditor.txt\shell\open]
[HKEY_CLASSES_ROOT\emeditor.txt\shell\open\command]
@="\"C:\\Program Files\\EmEditor\\EMEDITOR.EXE\" \"%1\""
[HKEY_CLASSES_ROOT\emeditor.txt\shell\print]
[HKEY_CLASSES_ROOT\emeditor.txt\shell\print\command]
@="\"C:\\Program Files\\EmEditor\\EMEDITOR.EXE\" /p \"%1\""
感謝@ X-Cubed模型
的文件名將作爲參數傳遞給您的應用程序:
public static void Main(string[] args)
{
if (args != null && args.Length > 0)
{
string filename = args[0];
if (File.Exists (filename))
{
//Open file
}
}
}
你是如何與你的程序的文件類型關聯? – gideon
我只是點了它,並打開..並選擇我的exe文件 – Nick
我想你只是從[命令行](http://msdn.microsoft.com/en-us/library/system.environment讀取。命令行)。 –