none
如何像C++一样在应用商店应用中读取文件? RRS feed

  • 问题

  • 我的代码是:

    auto openPicker = ref new Windows::Storage::Pickers::FileOpenPicker();
    openPicker->FileTypeFilter->Append("*");
    create_task(openPicker->PickSingleFileAsync()).then([this](Windows::Storage::StorageFile^ file)
    {
    	if (file != nullptr){
    		auto userContent = Windows::Storage::FileIO::ReadTextAsync(file);
    		text->Text = userContent->ToString();
    	}
    });

    我希望输出的是文件中的字符,但是实际输出是

    Windows.Foundation.IAsyncOperation`1<String>

    应该怎样更改?

    2014年4月26日 13:32

答案

  • ReadTextAsync和PickSingleFileAsync一样,都是异步操作,所以你需要跟PickSingleFileAsync一样使用create_task,then来在操作完成后获取数据
    2014年4月26日 14:20
  • 使用create_task以后还是没有输出正确的文字,代码:

    auto openPicker = ref new Windows::Storage::Pickers::FileOpenPicker();
    openPicker->FileTypeFilter->Append("*");
    create_task(openPicker->PickSingleFileAsync()).then([this](Windows::Storage::StorageFile^ file)
    {
    	if (file != nullptr){
    		create_task(Windows::Storage::FileIO::ReadTextAsync(file)).then([this](String^ text_){
    			text->Text = text_;
    		});
    	}
    });

    2014年4月27日 11:36
  • 没有输出正确文字的原因是Windows::Storage::FileIO::ReadTextAsync(file)返回的不是文字,而是一个异步任务对象IAsyncOperation<String^>,需要执行这个异步任务才能获取文字。

    我测试了一下你修改后的代码,发现在我的电脑上是能正确的读取文本的。所以你可能要设断点调试一下才能知道为什么在你的电脑上没有能够正确输出文字。有可能file不是正确的文本文件或者其他原因,得调试才能知道了。

    2014年4月28日 10:14

全部回复

  • ReadTextAsync和PickSingleFileAsync一样,都是异步操作,所以你需要跟PickSingleFileAsync一样使用create_task,then来在操作完成后获取数据
    2014年4月26日 14:20
  • 我想知道为什么没有输出正确的文字
    2014年4月27日 11:29
  • 使用create_task以后还是没有输出正确的文字,代码:

    auto openPicker = ref new Windows::Storage::Pickers::FileOpenPicker();
    openPicker->FileTypeFilter->Append("*");
    create_task(openPicker->PickSingleFileAsync()).then([this](Windows::Storage::StorageFile^ file)
    {
    	if (file != nullptr){
    		create_task(Windows::Storage::FileIO::ReadTextAsync(file)).then([this](String^ text_){
    			text->Text = text_;
    		});
    	}
    });

    2014年4月27日 11:36
  • 没有输出正确文字的原因是Windows::Storage::FileIO::ReadTextAsync(file)返回的不是文字,而是一个异步任务对象IAsyncOperation<String^>,需要执行这个异步任务才能获取文字。

    我测试了一下你修改后的代码,发现在我的电脑上是能正确的读取文本的。所以你可能要设断点调试一下才能知道为什么在你的电脑上没有能够正确输出文字。有可能file不是正确的文本文件或者其他原因,得调试才能知道了。

    2014年4月28日 10:14