用自己的应用打开自定义文件

时间:2012-11-30 22:38:12

标签: c# visual-studio-2012

  

可能重复:
  How to associate a file extension to the current executable in C#

所以,我正在申请学校(最终项目)。

在这个应用程序中,我有一个Project - 类。 这可以保存为自定义文件,例如测试。的 GPR 即可。 (.gpr是扩展名)。

如何让windows /我的应用程序将.gpr文件与此应用程序关联,这样如果我双击.gpr文件,我的应用程序将触发并打开文件 (因此启动OpenProject方法 - 这会加载项目)。

询问如何让Windows将文件类型与应用程序关联,我问如何在我的Visual Studio 2012代码中捕获它。

更新 由于我的问题似乎不太清楚:

  atm,我什么也没做,所以我可以遵循最好的解决方案。我想要的是双击.gpr,确保Windows知道用我的应用程序打开它,并在我的应用程序中捕获文件路径。

非常感谢任何帮助!

1 个答案:

答案 0 :(得分:10)

使用应用程序打开文件时,该文件的路径将作为第一个命令行参数传递。

在C#中,这是args[0]方法的Main

static void Main(string[] args)
{
    if(args.Length == 1) //make sure an argument is passed
    {
        FileInfo file = new FileInfo(args[0]);
        if(file.Exists) //make sure it's actually a file
        {
           //Do whatever
        }
    }

    //...
}

WPF

如果您的项目是WPF应用程序,请在App.xaml添加Startup事件处理程序:

<Application x:Class="WpfApplication1.App"
             xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
             xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
             StartupUri="MainWindow.xaml"
             Startup="Application_Startup"> <!--this line added-->
    <Application.Resources>

    </Application.Resources>
</Application>

您的命令行参数现在位于e.Args事件处理程序的Application_Startup中:

private void Application_Startup(object sender, StartupEventArgs e)
{
    if(e.Args.Length == 1) //make sure an argument is passed
    {
        FileInfo file = new FileInfo(e.Args[0]);
        if(file.Exists) //make sure it's actually a file
        {
           //Do whatever
        }
    }
}