处理来自 OnFileActivated() 的文件
Handle files from OnFileActivated()
我在处理 OnFileActivated()
中传递给我的应用程序的文件时遇到问题。首先,我在我的应用程序的 Package.appminifest
中注册了特定的文件扩展名,因此在点击特定文件后我的应用程序启动并 运行 OnFileActivated 函数。
在我的案例中,文件是用 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)) {
...
正如你们中的一些人所预料的那样,我在最后一行尝试访问文件时遇到错误。我也尝试了不同的解决方案,如将文件复制到本地文件夹然后访问它,但也没有成功。
问题
有什么办法可以做这样的事情吗?或者也许我做的方式完全错误?
使用 Path
属性 对代理文件没有用处(例如您从 Activation 获得的文件)。请改用采用 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
有一个以流为参数的构造函数。
我在处理 OnFileActivated()
中传递给我的应用程序的文件时遇到问题。首先,我在我的应用程序的 Package.appminifest
中注册了特定的文件扩展名,因此在点击特定文件后我的应用程序启动并 运行 OnFileActivated 函数。
在我的案例中,文件是用 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)) {
...
正如你们中的一些人所预料的那样,我在最后一行尝试访问文件时遇到错误。我也尝试了不同的解决方案,如将文件复制到本地文件夹然后访问它,但也没有成功。
问题 有什么办法可以做这样的事情吗?或者也许我做的方式完全错误?
使用 Path
属性 对代理文件没有用处(例如您从 Activation 获得的文件)。请改用采用 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
有一个以流为参数的构造函数。