FileOpenPicker和LocallyIncomplete(SMART)文件

时间:2014-02-05 00:33:53

标签: c# windows-runtime windows-store-apps winrt-xaml onedrive

我目前正在尝试读取文件(用户选择的文件)并存储它们(经过他们的许可)。我遇到的麻烦是,安装并启用SkyDrive后,我有一个所谓的SMART文件,用LocallyIncomplete属性注明。

这意味着SkyDrive应用程序在SkyDrive中存储对此文件的引用,但实际上并未提取整个文件,直到用户请求它(通过某种方式使用它)。如果他们通过SkyDrive应用程序访问选择器中的文件(左上角的下拉菜单),这完全可以正常工作。它甚至将未完全脱机的那些标记为LocallyIncomplete,而不标记那些可脱机使用的那些。

问题(我很幸运地发现)是我在我的SkyDrive应用程序中包含了一个文件夹(特别是我的文档库)。这使得所有文件都显示在选择器中,应该如此。

如果我尝试从库中打开任何 SkyDrive文件,那么它不仅会将所有文件标记为LocallyIncomplete(即使SkyDrive应用程序没有),但它会抛出本机IOException,这是我的应用程序无法捕获的。即使所请求的文件通过SkyDrive应用程序在本地可用,也会发生这种情况。这在我的机器上始终可以重现。

经过进一步调查,似乎我可以检查Provider属性以确保具有LocallyIncomplete属性的文件来自SkyDrive应用程序,这至少是好的(我可以避免无法捕捉的例外)。这将作为一种解决方法现在可以使用,但它不太理想。

另外,我还没有在Connect / MSDN上找到任何提及。我希望MSFT-y不介意仔细检查,看看在我自己提交之前是否有错误提交,因为我找不到。

感谢。

1 个答案:

答案 0 :(得分:0)

LocallyIncomplete表示文件未100%下载到用户的计算机上。

你可以这样检查

if (!file.Attributes.HasFlag(FileAttributes.LocallyIncomplete))
{
//dostuff
}

其中file的类型为StorageFile