在打开时读取与程序关联的序列化文件

时间:2013-07-25 13:21:08

标签: c# wpf file-extension

我已经完成了我的程序,将其序列化以便保存并创建了一个文件打开系统来打开从我的应用程序保存的文件。我甚至在注册表上创建了与innosetup的文件关联,这非常合适。

现在我想要实现的是,只要用户双击程序中保存的文件,程序就应该读取并反序列化它。

例如,当您双击或打开.docx或.doc文件时,将打开Microsoft Word并读取并打开该文件。目前我的程序将打开,但我不知道如何检测何时从文件中打开它以便我可以开始反序列化。

注意:反序列化本身不是问题,它正在检测我是否应该这样做。

2 个答案:

答案 0 :(得分:1)

通过双击关联文件启动程序时,文件名将作为命令行参数传入。您可以在文件扩展名关联设置中指定此参数的位置。

如果您将关联设置为:

  

program.exe%1

双击文件将导致:

  

program.exe C:\ Folder \ File.ext

可以使用Environment.GetCommandLineArgs()Main(string[] args)方法访问此内容:

static void Main(string[] args)
    {
        if (args.Length > 0)
        {
            // Get the argument
            string fileLocation = args[0];

            // Load and deserialize
            // Do the do
        }
    }

这是MSDN article on command line arguments

答案 1 :(得分:0)

谢谢@Macropus,你实际上并没有告诉我我不知道的事情,你指出了我的错误。当我在innosetup

上设置注册表值时会发生这种情况

而不是我写的innosetup上的{app}\program.exe %1,“{app} \ program.exe”“%1”

忽略了打开程序的文件的路径。

所以当我查询Environment.GetCommandLineArgs();

仅返回program.exe的路径,但现在,返回了program.exe和调用该程序的文件的路径,可从Environment.GetCommandLineArgs()[1]

访问

要从快捷方式或program.exe本身打开文件时使其工作, 我做了

var comArgs = Environment.GetCommandLineArgs();
if (comArgs.Length > 1)
{
    // Then I can deserialize here.
}

现在工作,谢谢大家。