如何在C#中创建自定义文件扩展名?

6

我需要帮助了解如何在我的C#应用程序中创建自定义文件扩展名。我创建了一个基本的笔记管理应用程序。现在,我将我的笔记保存为.rtf格式(例如note1.rtf)。我想要创建一个文件扩展名,只有我的应用程序能够理解(例如,note.not)。

5个回答

10
作为部署点,需要注意的是,ClickOnce支持文件扩展名(只要不处于“仅在线”模式)。这使得配置系统以识别新文件扩展名变得轻松易行。
您可以在VS2008中找到此选项:项目属性 -> 发布 -> 选项 -> 文件关联。如果您没有VS2008,您也可以手动完成它,但这并不好玩。

8
文件扩展名是您格式的任意选择,它只取决于您的应用程序在安装时将某个文件扩展名注册为特定类型的文件。自己创建文件格式通常意味着您使用只有您的应用程序可以解析的格式保存该格式。它可以是纯文本或二进制,甚至可以使用XML或其他格式,关键是您的应用程序应能轻松解析它。

4
你的问题有两种可能的解释: 我的文档应该使用什么文件格式? 你目前正在将笔记保存为RTF格式。无论你选择什么文件名扩展名来保存它们,只要用户知道它是RTF格式并指向该文件,任何理解RTF格式的应用程序都能够打开你的笔记。
如果你想将文档保存在自定义文件格式中,以便其他应用程序无法读取它们。你需要编写代码,将Rich Edit控件生成的RTF流采用你自己的格式序列化成二进制流。
我个人认为这不值得花费这样的努力... 我的文档的文件名扩展名是什么? 你目前正在使用.rtf文件名扩展名将文档保存为RTF格式。其他应用程序与该文件扩展名相关联,因此在Windows资源管理器中双击该文件会打开该应用程序而不是你的应用程序。
如果你想在Windows资源管理器中双击文件并打开你的应用程序,你需要更改你正在使用的文件名扩展名,并为该扩展名创建正确的关联。
文件扩展名关联由注册表条目定义。你可以在HKLM\Software\Classes(每台计算机)或HKCU\Software\Classes(每个用户)中创建这些条目,虽然每台计算机是最常见的情况。有关实际注册表条目的更多详细信息以及指向MSDN文档和示例的链接,请查看我在这个SO问题中对Vista文档图标关联的回答

2
我认为关键是创建正确的注册表值,或者查看这篇CodeProject文章

而我会让你的部署系统(例如设置项目,生成MSI或任何你使用的工具)负责确切的注册细节。 - peSHIr

1

你可以用任何扩展名保存文件,只需在保存文件时将其放入文件名中即可。

我感觉你的问题是“如何以除RTF之外的其他格式保存文件?”。你必须发明自己的格式,但实际上你并不想这样做。你仍然可以将RTF保存到名为mynote.not的文件中。

我建议你继续使用其他程序可读取的格式。一旦用户想要执行你的程序不支持的操作,他们会感激你的。


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