处理来自 OnFileActive() 的文件

本文关键字:文件 OnFileActive 处理 | 更新日期: 2023-09-27 18:36:55

我在处理OnFileActivated()中传递给我的应用程序的文件时遇到问题。首先,我已经在我的应用程序Package.appminifest注册了特定的文件扩展名,因此在点击特定文件后,我的应用程序启动并运行OnFileActive函数。

在我的情况下,文件是用System.IO.Compression.ZipArchive压缩的存档,但我认为这里并不重要。乞求我的函数如下所示:

    protected override async void OnFileActivated(FileActivatedEventArgs args) {
        base.OnFileActivated(args);
        var file = args.Files[0];
        using (var archive = ZipFile.OpenRead(file.Path)) {
        ...

正如你们中的一些人可以预料的那样,当我尝试访问最后一行中的文件时,我会收到错误。我还尝试了不同的解决方案,例如将文件复制到本地文件夹然后访问它,但也没有运气。

问题有没有办法做这样的事情?或者也许我做错了?

处理来自 OnFileActive() 的文件

使用 Path 属性对代理文件(例如从激活中获取的文件)没有用。请改用采用Stream的构造函数。

这是正确答案:

    protected override async void OnFileActivated(FileActivatedEventArgs args) {
        base.OnFileActivated(args);
        var file = (StorageFile)args.Files[0];
        using (var archive = new ZipArchive(await file.OpenStreamForReadAsync())) {
        ...

我之前没有注意到ZipArchive有将流作为参数的构造函数。