将Windows shell IStream转换为std :: ifstream / std :: get_line

时间:2012-08-07 12:45:59

标签: ifstream windows-shell getline

我们编写了大量使用标准模板库的代码。我想将一些应用程序集成到windows shell中,这应该为我们的用户提供更好的体验。

一个集成涉及一个Shell预览版提供程序,代码非常简单,但是,我坚持实现某些东西的最佳方式。

shell通过我的预览处理程序给了我一个IStream对象,我需要将它转换/改编为std :: ifstream对象,主要是为了让std :: getline可以在callstack中进一步调用。

我想知道是否有一种“标准”的方式来进行调整,还是需要设置我的袖子和代码呢?

TIA。

1 个答案:

答案 0 :(得分:0)

对此持续了一段时间:

std::stringstream buff;
BYTE ib[2048];
ULONG totread=0, read=0, sbuff = 2048;
HRESULT hr;
do {
    hr = WinInputStream->Read(ib, sbuff, &read);
    buff.write(ib, read);
    totread+=read;
} while((sbuff == read) && SUCCEEDED(hr));

if(totread == 0) return false;
ifstream i;
TCHAR* ncbuff = const_cast<TCHAR*>(buff.str().c_str());
i.rdbuf()->pubsetbuf(ncbuff, buff.str().length());

但是不喜欢把它全部读入内存,因为它要再次处理。

所以我使用IInitializeWithFile实现了我的预览处理程序。