2
我试图通过套接字连接发送的图像,但我有下面的代码有问题:如何从IStream读取字符数组并将其写入另一个IStream?
//stream to char array
STATSTG myStreamStats;
ULONG bytesSaved;
myStream->Stat(&myStreamStats, 0);
char* streamData = new char[myStreamStats.cbSize.QuadPart];
if(myStream->Read(streamData, myStreamStats.cbSize.QuadPart, &bytesSaved) == S_OK)
cout<<"OK!"<<endl;
else
cout<<"Not OK!"<<endl;
//char array to stream
if(myStreamR->Write(streamData, myStreamStats.cbSize.QuadPart, &bytesSaved) == S_OK)
cout<<"OK!"<<endl;
else
cout<<"Not OK!"<<endl;
//saving the image to a file
myImage = Image::FromStream(myStreamR);
myImage->Save(lpszFilename, &imageCLSID, NULL);
程序编译和运行,但我没有得到我的形象。如果我使用原始的“myStream”,但没有使用从原始数据流中读取的char数组构造的“myStreamR”,我会得到它。
输出是两个“OK!”,这意味着所有的字节都被复制到数组中,并且所有的字节都被粘贴到新的数据流中。但是,我检查了savedBytes,并且在read()之后发现值为0(不好),而在write()之后它等于我给出的流大小。那么为什么在地球上阅读()给我一个“S_OK”标志,如果没有什么被读取?
AAAAH!现在这一切都有道理!在我的生活中,我不会认为寻找者的位置发生了变化。非常感谢你! – Kesarion
除非你实际上正在做'Stat()'和'FromStream()'调用之间的数据,我只是将'myStream'直接传递给'FromStream()',或者至少使用'myStream-> Clone ()'如果你不想'FromStream()'修改'myStream'的当前位置。 –