如何在c#.net中使用自定义扩展保存/打开自定义程序?

如何在c#.net中使用自定义扩展保存/打开自定义程序?,c#,.net,wpf,winforms,C#,.net,Wpf,Winforms,我正在C#,.Net平台上使用Windows窗体应用程序编写一个小程序。假设我制作了一个绘画应用程序,并希望保存我所制作的图片。如何保存所做的更改并再次打开,以便使用我的程序更改某些部件?像windows中的默认绘图程序一样,我想保存它并再次打开它。它不必是绘图程序或txt文件,通常我如何保存在自定义程序中所做的工作,并使用程序的扩展名(例如.paint)保存它。两个选项: 编写一个可以将文件扩展名与程序关联的安装程序 在您的程序启动时,检查Windows注册表中的文件扩展名是否与您的程序相关联

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

两个选项:

  • 编写一个可以将文件扩展名与程序关联的安装程序
  • 在您的程序启动时,检查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);
    

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

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