打开关联文件

5
我用C#制作了一个文件编辑器,可以通过工具栏中的“打开”按钮打开文件。我还将正确的文件类型与程序相关联,所以当我点击扩展名为*.nlp的文件时,程序会正常打开,但不会打开文件本身(这很合理,因为我还没有实现它)。
现在我的问题是,如何实现这样的功能?我希望在单击文件时能够打开并加载文件。(顺便说一句,这个文件只是普通文本,没有什么特别之处,而且是针对Windows操作系统的。)

你是如何将文件类型与你的程序关联起来的? - gideon
我刚刚点击了它,然后选择了“打开方式”,并选择了我的exe文件。 - Nick
我猜你只是从命令行读取。 - Uwe Keim
更多信息请参见:https://dev59.com/KkvSa4cB1Zd3GeqPeW90 - v20100v
3个回答

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

2

目前似乎没有直接管理文件关联的 .Net API,但您可以使用注册表类来读取和写入所需的键。

您需要在 HKEY_CLASSES_ROOT 下创建一个键,名称设置为您的文件扩展名(例如:".txt")。将此键的默认值设置为您的文件类型的唯一名称,例如 "Acme.TextFile"。然后,在 HKEY_CLASSES_ROOT 下创建另一个键,名称设置为 "Acme.TextFile"。添加一个名为 "DefaultIcon" 的子键,并将该键的默认值设置为包含您希望用于此文件类型的图标文件的路径。添加另一个同级项 "shell"。在 "shell" 键下,为您希望通过资源管理器上下文菜单可用的每个操作添加一个键,将每个键的默认值设置为您的可执行文件的路径,后跟一个空格和 "%1" 以表示所选文件的路径。

例如,以下是一个示例注册表文件,用于在 .txt 文件和 EmEditor 之间建立关联:

Windows Registry Editor Version 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 
    }
  }
}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接