积极答复者
metro c++中各种流怎么转换啊?

问题
答案
-
File Access Sample C++ 版本有例子代码: http://code.msdn.microsoft.com/windowsapps/File-access-sample-d723e597 通过DataWriter 和 DataReader就可以做到:
IBuffer^ --> IRandomAccessStream
IBuffer^ buffer = ...; task<IRandomAccessStream^>(file->OpenAsync(FileAccessMode::ReadWrite)).then([this, buffer](IRandomAccessStream^ stream) { IOutputStream^ outputStream = stream->GetOutputStreamAt(0); DataWriter^ dataWriter = ref new DataWriter(outputStream); dataWriter->WriteBuffer(buffer); ...... });
IRandomAccessStream --> IBuffer^
已删除错误代码.
modify to correct code:
create_task(KnownFolders::DocumentsLibrary->GetFileAsync("test.txt")).then([this](IStorageFile^ file) { create_task(file->OpenAsync(FileAccessMode::Read)).then([this](IRandomAccessStream^ stream) { IInputStream^ inputStream = stream->GetInputStreamAt(0); DataReader^ dataReader = ref new DataReader(inputStream); create_task(dataReader->LoadAsync((unsigned int)stream->Size)).then([this,dataReader](unsigned int result) { IBuffer^ buffer = dataReader->DetachBuffer(); ... }); }); });
论坛中还有一模一样问题的帖子:
- http://social.msdn.microsoft.com/Forums/zh-CN/metroappzhcn/thread/b26bb1fe-7671-41be-a49e-c223569d282f
- http://social.msdn.microsoft.com/Forums/zh-CN/metroappzhcn/thread/5242b502-9ed7-44c0-85f4-ca754c18ff1f
- http://social.msdn.microsoft.com/Forums/zh-CN/metroappzhcn/thread/4a28d90f-904e-437a-a930-501d2c83d2fb
Bob Bao [MSFT]
MSDN Community Support | Feedback to us
- 已标记为答案 Jie BaoModerator 2012年6月5日 18:24
- 已编辑 Jie BaoModerator 2012年6月18日 9:35
全部回复
-
File Access Sample C++ 版本有例子代码: http://code.msdn.microsoft.com/windowsapps/File-access-sample-d723e597 通过DataWriter 和 DataReader就可以做到:
IBuffer^ --> IRandomAccessStream
IBuffer^ buffer = ...; task<IRandomAccessStream^>(file->OpenAsync(FileAccessMode::ReadWrite)).then([this, buffer](IRandomAccessStream^ stream) { IOutputStream^ outputStream = stream->GetOutputStreamAt(0); DataWriter^ dataWriter = ref new DataWriter(outputStream); dataWriter->WriteBuffer(buffer); ...... });
IRandomAccessStream --> IBuffer^
已删除错误代码.
modify to correct code:
create_task(KnownFolders::DocumentsLibrary->GetFileAsync("test.txt")).then([this](IStorageFile^ file) { create_task(file->OpenAsync(FileAccessMode::Read)).then([this](IRandomAccessStream^ stream) { IInputStream^ inputStream = stream->GetInputStreamAt(0); DataReader^ dataReader = ref new DataReader(inputStream); create_task(dataReader->LoadAsync((unsigned int)stream->Size)).then([this,dataReader](unsigned int result) { IBuffer^ buffer = dataReader->DetachBuffer(); ... }); }); });
论坛中还有一模一样问题的帖子:
- http://social.msdn.microsoft.com/Forums/zh-CN/metroappzhcn/thread/b26bb1fe-7671-41be-a49e-c223569d282f
- http://social.msdn.microsoft.com/Forums/zh-CN/metroappzhcn/thread/5242b502-9ed7-44c0-85f4-ca754c18ff1f
- http://social.msdn.microsoft.com/Forums/zh-CN/metroappzhcn/thread/4a28d90f-904e-437a-a930-501d2c83d2fb
Bob Bao [MSFT]
MSDN Community Support | Feedback to us
- 已标记为答案 Jie BaoModerator 2012年6月5日 18:24
- 已编辑 Jie BaoModerator 2012年6月18日 9:35
-
reference to: http://social.msdn.microsoft.com/Forums/zh-CN/metroappzhcn/thread/8fa034b2-3149-4cff-a7ef-9c02235238b0
Bob Bao [MSFT]
MSDN Community Support | Feedback to us
-
又发现了一个问题,IBuffer^ --> IRandomAccessStream转换成功了,然后我让图片控件显示出来, 这时候,我想保持图片,保持不了。 如果不让图片显示出来,就是去掉以下代码:
BitmapImage^ bitmapImage = ref new BitmapImage();
bitmapImage->SetSource(randomAccessStream);this->image_Show->Source = bitmapImage;));就可以保存成功了。请问一下,是不是因为让bitmapImage->SetSource()。所以IRandomAccessStream就不能再用了?如果这时候,想通过IRandomAccessStream保存文件,有办法?谢谢
task<IRandomAccessStream^>(file->OpenAsync(FileAccessMode::ReadWrite)).then([this, buffer](IRandomAccessStream^ stream)
{
IOutputStream^ outputStream = stream->GetOutputStreamAt(0);
DataWriter^ dataWriter = ref new DataWriter(outputStream);
dataWriter->WriteBuffer(buffer);task<unsigned int>(datawriter->StoreAsync()).then([this, randomAccessStream,_file,datawriter](unsigned int i){
datawriter->FlushAsync();
BitmapImage^ bitmapImage = ref new BitmapImage();
bitmapImage->SetSource(randomAccessStream);
this->image_Show->Source = bitmapImage;));//用DataReader 把 IRandomAccessStream读取出来,然后保存。
DataReader^ dataReader = ref new DataReader(randomAccessStream);
.......
......
});