打开带关联的文件

时间:2012-06-05 06:09:29

标签: c# file associations file-extension

我在C#中创建了一个文件编辑器,我可以使用工具栏中的“打开”按钮打开文件,我还将正确的文件类型与程序相关联,因此当我单击扩展名为* .nlp的文件时程序打开正确,但不打开文件本身(这是非常合乎逻辑的,因为我还没有实现它)

现在是我的问题,我该如何实现这样的事情?我希望在点击它时打开并加载文件。

(顺便说一下,这个文件只是纯文本,所以没什么特别的,如果重要的话,那就是windows)

3 个答案:

答案 0 :(得分: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
}

答案 1 :(得分:2)

似乎没有用于直接管理文件关联的.Net API,但您可以使用Registry类来读取和编写所需的密钥。

您需要在HKEY_CLASSES_ROOT下创建一个名称设置为文件扩展名的键(例如:“。txt”)。将此键的默认值设置为文件类型的唯一名称,例如“Acme.TextFile”。然后在HKEY_CLASSES_ROOT下创建另一个键,名称设置为“Acme.TextFile”。添加一个名为“DefaultIcon”的子项,并将该键的默认值设置为包含您要用于此文件类型的图标的文件。添加另一个名为“shell”的兄弟。在“shell”键下,通过Explorer上下文菜单为您希望提供的每个操作添加一个键,将每个键的默认值设置为可执行文件的路径,后跟空格和“%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 :(得分:2)

文件名将作为参数传递给您的应用程序:

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