如何使用WinRT获取文件?

时间:2012-06-16 04:00:52

标签: windows-8 windows-runtime microsoft-metro

我想要的是什么:
从AppData获取xml以使用

我的代码

   StorageFolder localFolder = Windows.Storage.ApplicationData.Current.LocalFolder;
   StorageFile sampleFile = localFolder.GetFileAsync("abc.xml");

我得到什么
错误:无法将类型'Windows.Foundation.IAsyncOperation'隐式转换为'Windows.Storage.StorageFile'

我检查的内容

  

当此方法成功完成时,它会返回 StorageFile   代表文件。

from MSDN

我有什么
Windows 8 Release Preview 64bit;
适用于Windows 8的Visual Studio Express 2012 RC;
C#

我根据MSDN文档编写代码,为什么会发生此错误以及如何解决?

2 个答案:

答案 0 :(得分:6)

拉里给了你正确的解决方案。让我试着解释发生了什么。

如果查看GetFileAsync的MSDN文档,您会看到它返回IAsyncOperation。您的代码假定它返回SampleFile。 GetFileAsync不提供文件,它提供了一个对象,一旦完成回溯,它将提供一个文件。

Cwait中的Await提供了一个函数,一旦完成条件满足,该对象(或代表该对象)将调用该函数。然后该函数将值返回给您。 JavaScript(.then或.done)中的承诺提供了类似的功能,但您必须自己提供该功能。

这样做的原因是应用程序可以响应。文件访问速度很慢。如果访问内存花了1秒钟,那么文件访问大约需要15分钟。 Asynchronous programming允许在程序等待时发生其他事情。

答案 1 :(得分:3)

如果您使用的是C#或“StorageFile sampleFile = await localFolder.GetFileAsync("abc.xml")”,请尝试使用“localFolder.GetFileAsnc("abc.xml").done(function (sampleFile) {})”。