打开具有关联的文件

本文关键字:文件 关联 | 更新日期: 2023-09-27 18:36:14

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

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

(顺便说一句,该文件只是纯文本,所以没有什么特别的,如果这很重要,它适用于 Windows)

打开具有关联的文件

在 Windows 中,文件关联在注册表中的存储和管理HKEY_CLASSES_ROOT

您可以手动执行以下操作,也可以最终编写一个小安装程序以将正确的条目写入注册表。

需要注册扩展,然后将其与本文档所述的程序相关联。另请参阅此文档 注册表应如下所示:

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"。然后在HKEY_CLASSES_ROOT下创建另一个密钥,名称设置为"Acme.TextFile"。添加一个名为"DefaultIcon"的子项,并将键的默认值设置为包含要用于此文件类型的图标的文件。添加另一个称为"外壳"的同级。在"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立方体

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

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