将boost::归档文件写入C#stream
我想知道是否有人对此有任何见解将boost::归档文件写入C#stream,c#,c++,boost,c++-cli,archive,C#,C++,Boost,C++ Cli,Archive,我想知道是否有人对此有任何见解 我有一个本地C++对象(在DLL中),它使用Booo::Cuivi.< /P>编写数据。 该项目由一个C#应用程序(通过一个C++/CLI类)使用,我想将其中几个归档文件存储在一个压缩文件中。我在C#(DotNetZipFile)中使用了离子.Zipfile 目前,我正在写入一个临时文件,然后使用ZipFile.UpdateFile添加到归档文件中,但希望避免中间人 下面是我想说的: C#: C++/CLI: void ManagedObjectWrapper::
我有一个本地C++对象(在DLL中),它使用Booo::Cuivi.< /P>编写数据。 该项目由一个C#应用程序(通过一个C++/CLI类)使用,我想将其中几个归档文件存储在一个压缩文件中。我在C#(DotNetZipFile)中使用了离子.Zipfile
目前,我正在写入一个临时文件,然后使用ZipFile.UpdateFile添加到归档文件中,但希望避免中间人 下面是我想说的: C#: C++/CLI:void ManagedObjectWrapper::Save(System::IO::Stream ^ stream)
{
std::ofstream *myofstream = MAGICALFunction(stream);
pUnmanagedObject->Save(myofstream);
}
C++:
void UnmanagedObject::Save(std::ofstream*myofstream)
{
boost::archive::binary_oarchive oa(*myofstream);
oa实际上,使用适当的下溢/上溢实现对streambuf进行子类化是一条可行之路
我不记得这很难做到,但我现在也没有合适的windows机器来做这件事,所以您可以四处寻找现成的实现
资源:
- 根据我的经验,不难找到合适的小样本:
- ;我记得我在这里使用了s的答案之一(关于加密或压缩流?)
- Ed先生有一篇文章,向您展示了仅从标准库开始实际需要的所有内容。它使用了3个不同的示例来说明这一点
- 别忘了Boost IOStreams。正如Ed先生所说:
如果您在阅读本文之前还不熟悉流式缓冲区,我希望您现在能对它们感到更舒服一点。所有的实现都非常基本,但还有很多实现是可能的。然而,我发现,一旦我开始尝试更奢侈的缓冲区,事情会很快变得复杂起来。此时我将着手提升IOStreams库,它为实现更复杂的缓冲区和流提供了一个框架
它还允许您独立地处理源、汇、过滤器和其他概念。在我们的最后一个示例中,我们将汇硬编码为另一个std::ostream。如果我们希望数据传输到没有流接口的地方,该怎么办?Boost IOStreams库通过隔离这些概念,在这方面提供了更大的灵活性在我的示例代码中,我不得不将它们混合在一起
- 参考资料包括:
CharStyle您可以/需要使用充当系统.IO.Stream
的子类streambuf
或ostream
,然后将其传递给非托管对象::Save()
。这不是为胆小的人准备的。老实说,我没有试过这个,因为我现在没有那么多时间来做。我真的希望得到一个简单的答案,现在必须保持现状。但是,这是最好的答案(据我所知),所以我就这样做了。
void ManagedObjectWrapper::Save(System::IO::Stream ^ stream)
{
std::ofstream *myofstream = MAGICALFunction(stream);
pUnmanagedObject->Save(myofstream);
}
void UnmanagedObject::Save(std::ofstream *myofstream)
{
boost::archive::binary_oarchive oa(*myofstream);
oa << *this;
}