【问题标题】:How to save/open custom program with a custom extension in c# .net?如何在 c# .net 中使用自定义扩展名保存/打开自定义程序?
【发布时间】:2017-11-18 18:48:07
【问题描述】:

我正在使用 C#、.Net 平台中的 Windows 窗体应用程序编写一个小程序。假设我制作了一个绘画应用程序并想保存我所做的图片。如何保存我所做的更改并再次打开它,以便我可以使用我的程序更改某些部分?就像 Windows 中的默认画图程序一样,我想保存它并再次打开它。它不一定是绘图程序或 txt 文件,一般我如何保存我在自定义程序中所做的工作并使用我的程序扩展名(比如说 .paint)保存它。

【问题讨论】:

  • 您自己做过研究或尝试吗?
  • 这个问题不具体。保存文件并在 .NET 中打开它应该很容易。有 System.IO 命名空间,但是您要写入文件的内容才是真正的问题。您可以将对象序列化为(二进制、XML、JSON)或创建 CSV 文件、.xlsx、.docx、pdf 等......您可以发明自己的文件结构。如果要保存图像,请使用 System.Drawing 命名空间 Image 对象,它具有 Save() 方法。所以我建议你决定你要保存什么,然后再问这个问题。因为这个问题现在还没有很好的答案。
  • 假设使用 Autocad。当您完成工作并保存它时,它会将其保存为 .cad,并且在文件上可以看到软件公司的徽标。当您单击文件打开时,它与 Autocad 软件相关联。我确实做了研究,但在互联网上找不到任何东西。如果可以,请与我分享。谢谢

标签: c# .net wpf winforms


【解决方案1】:

两个选项:

  1. 编写一个安装程序,可以将您的文件扩展名与您的程序相关联。
  2. 在您的程序启动时检查 Windows 注册表,如果您的文件扩展名与您的程序相关联,如果没有,则关联您自己,这样下次用户只需单击该文件,您的程序就会自动打开

示例代码:

public static void SetAssociation(string Extension, string KeyName, string OpenWith, string FileDescription)
{
    CurrentUser = Registry.CurrentUser.OpenSubKey("Software\\Microsoft\\Windows\\CurrentVersion\\Explorer\\FileExts\\" + Extension, true);
    CurrentUser.DeleteSubKey("UserChoice", false);
    CurrentUser.Close();

    // Tell explorer the file association has been changed
    SHChangeNotify(0x08000000, 0x0000, IntPtr.Zero, IntPtr.Zero);
}

[DllImport("shell32.dll", CharSet = CharSet.Auto, SetLastError = true)]
public static extern void SHChangeNotify(uint wEventId, uint uFlags, IntPtr dwItem1, IntPtr dwItem2);

您需要管理员权限才能运行此程序。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-08-28
    • 1970-01-01
    • 2016-10-26
    • 1970-01-01
    • 2014-07-24
    • 1970-01-01
    相关资源
    最近更新 更多