2012-06-05 64 views
5

我在C#中創建了一個文件編輯器,並且我可以使用工具欄中的「打開」按鈕打開文件,我還將正確的文件類型關聯到程序,所以當我單擊帶有擴展名的文件時* .nlp程序打開正確,但不打開文件本身(這是相當合乎邏輯的,因爲我還沒有實現它)打開關聯文件

現在是我的問題,我該如何實現這樣的事情?我想要打開並加載文件時,我點擊它。

(順便說一句,該文件只是純文本,所以沒有什麼特別的,它的窗戶,如果該事項)

+0

你是如何與你的程序的文件類型關聯? – gideon

+0

我只是點了它,並打開..並選擇我的exe文件 – Nick

+0

我想你只是從[命令行](http://msdn.microsoft.com/en-us/library/system.environment讀取。命令行)。 –

回答

4

在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 
} 
2

似乎沒有成爲直接管理文件關聯一個.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模型

2

的文件名將作爲參數傳遞給您的應用程序:

public static void Main(string[] args) 
{ 
    if (args != null && args.Length > 0) 
    { 
    string filename = args[0]; 
    if (File.Exists (filename)) 
    { 
     //Open file 
    } 
    } 
}