我一直在尝试用c ++中的Windows 10应用程序中的文件读取数据。但是我正在努力正确地构建异步任务,并且不断地收到错误告诉我读取数据的参数类型是不正确的。我一直在尝试使用GetFileAsync和GetFileFromPathAsync来获取我的StorageFile,但ReadTextAsync(文件)将无法编译。
以下是我编写的相关代码部分:
auto file = Windows::Storage::StorageFile::GetFileFromPathAsync("C:\\data.txt");
concurrency::create_task(Windows::Storage::FileIO::ReadTextAsync(file)).then([this, file](concurrency::task<Platform::String^> task)
{
try
{
Platform::String^ fileContent = task.get();
}
});
给出的错误是'file'不是ReadTextAsync的正确类型。它应该包含一个IStorageFile,但是当我按照上面尝试的方式构建我的文件时,它会收到类型IAsyncOperation。
我得到了一些建议,说明这个功能不正常的原因是我没有在任务中包含路径集合,但是我在尝试将任务链接在一起以获取数据时遇到了问题。我很确定我缺少一些基本的东西,但任何关于如何正确读取数据的指导都将非常感激。
答案 0 :(得分:3)
这是因为Windows::Storage::StorageFile::GetFileFromPathAsync
返回您应首先执行的异步操作,它将返回IStorageFile^
。这应该如下所示(我还没有编译):
auto getFileAsync = Windows::Storage::StorageFile::GetFileFromPathAsync("C:\\data.txt");
create_task(getFileAsync).then([this](StorageFile^ sf){
create_task(FileIO::ReadTextAsync(sf)).then([this](Platform::String^ text){
// here use text
});
});