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

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

文件扩展名是您的格式的任意选择,它只是依赖于您的应用程序在安装时将某个文件扩展名注册为Windows中某种类型的文件。

使用您自己的文件格式通常意味着您使用仅应用程序可以解析的格式保存该格式。 它可以是纯文本或二进制文件,甚至可以使用XML或任何格式,重点是您的应用程序应该能够轻松解析它。

作为部署点,您应该注意ClickOnce支持文件扩展名(只要它不处于“仅在线”模式)。 这使得配置系统识别新文件扩展名变得轻而易举。

您可以在VS2008中的项目属性 – >发布 – >选项 – >文件关联中找到它。 如果你没有VS2008,你也可以手动完成 ,但这并不好玩。

您的问题有两种可能的解释:

我的文件的文件格式应该是什么?

您正在以RTF格式保存当前的笔记。 无论您选择将文件扩展名保存为什么文件扩展名,任何了解RTF格式的应用程序都可以打开您的笔记,只要用户知道它在RTF中并将该应用程序指向该文件即可。

如果要以自定义文件格式保存文档,以便其他应用程序无法读取它们。 你需要提出一些代码来获取Rich Edit控件生成的RTF流(我假设你在应用程序中使用的是编辑器),并使用你自己的格式在二进制流中将其序列化。

我个人不认为这值得努力……

什么是我的文档的文件扩展名

您当前正在以RTF格式保存文档,文件扩展名为.rtf。 其他应用程序与该文件扩展名相关联,因此在Windows资源管理器中双击此类文件会打开该应用程序而不是您的应用程序。

如果您希望能够在Windows资源管理器中双击文件并打开应用程序,则需要更改正在使用的文件扩展名并为该扩展创建正确的关联。

文件扩展名关联由注册表中的条目定义。 您可以创建这些每台计算机(在HKLM \ Software \ Classes中)或按用户(在HKCU \ Software \ Classes中),尽管每台计算机是最常见的情况。 有关实际注册表项以及MSDN文档和示例链接的更多详细信息,请查看我对Vista文档图标关联的此SO问题的答案。

我认为这是创建正确的注册表值的问题,

或者查看这个codeproject的文章

您可以使用所需的扩展名保存文件,只需在保存文件时将其放在文件名中即可。

我觉得你的问题是“如何将文件保存在RTF以外的其他内容中?”。 你必须发明自己的格式,但实际上你不希望这样。 您仍然可以将RTF保存到名为mynote.not的文件中。

我建议你继续使用其他程序可读的格式。 一旦他们想要对您的程序不支持的笔记执行某些操作,您的用户将会感激不尽。