如何在visual c ++中异步读取文件?

时间:2016-05-04 13:16:02

标签: visual-studio-2013 windows-10 c++-cx

我一直在尝试用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。

我得到了一些建议,说明这个功能不正常的原因是我没有在任务中包含路径集合,但是我在尝试将任务链接在一起以获取数据时遇到了问题。我很确定我缺少一些基本的东西,但任何关于如何正确读取数据的指导都将非常感激。

1 个答案:

答案 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
   });
});