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

本文关键字:关联 序列化 文件 程序 读取 | 更新日期: 2023-09-27 18:24:50

我已经完成了我的程序,将其序列化以进行保存,并创建了一个fileopen系统来打开从我的应用程序中保存的文件。我甚至在注册表上创建了一个与innosetup的文件关联,它运行得非常好。

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

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

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

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

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

如果您将您的关联设置为:

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文章。

谢谢@Macropous,你实际上没有告诉我我不知道的事情,你指出了我的错误。当我在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.
}

现在开始工作,谢谢大家。