将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;
}