C++ 如何在不创建文件的情况下获取外部库写入ostream的原始字节

C++ 如何在不创建文件的情况下获取外部库写入ostream的原始字节,c++,C++,(我之前的问题以重复的形式结束,这很可笑,因为我无法更改我正在使用的库的实现) 我正在使用一个库(Poco)来创建zip文件。它将ostream作为输入,并将zip文件的数据写入其中。比如: std::ofstream ofs("file.zip", std::ios::binary); Compress compress(ofs); // add data to compress ... compress.close(); // now file.zip contains

(我之前的问题以重复的形式结束,这很可笑,因为我无法更改我正在使用的库的实现)

我正在使用一个库(
Poco
)来创建zip文件。它将
ostream
作为输入,并将zip文件的数据写入其中。比如:

std::ofstream ofs("file.zip", std::ios::binary);
Compress compress(ofs);
// add data to compress ...
compress.close();
// now file.zip contains added file
这很有效。但我希望能够在内存中创建zip,而无需创建文件。我尝试使用
stringstream
而不是
ofstream
,我在zip文件中的数据中得到了额外的换行符。还有其他的流我可以用吗


(如果有人仍然认为它是重复的,我需要一个解释,因为我看不出这个问题对我有什么帮助)

如果您在linux上,使用创建一个匿名文件怎么样?然后,您可以打开
/proc/self/fd/
,完成自己的工作。流的某些实现甚至可能提供一个接受文件*,您可以检查系统中是否存在这种情况。

使用
std::stringstream
——它将创建一个内存中字符串,您可以将其写入到ostream中,并且不会添加额外的新行。如果稍后将字符串复制到以文本模式打开的fstream(例如std::cout),则该进程可能会添加额外的CR字符,而这些字符不在字符串中(也不在原始输出中)


如果您看到额外的字符损坏了流,那么它们来自其他地方——除了压缩调用/lib之外,还有其他东西正在写入流,或者你如何看待你的流正在做一些事情。

你可以将
std::ios::binary
应用到一个stringstream,就像你在
of stream
@lakeweb中所做的一样。它没有任何效果,我不使用poco。但是,如果我这样做了,并且指出了什么,它应该会起作用,我会跟踪,看看会出什么问题。战术说明:你应该在另一个问题中对此进行辩论,并重新打开它。stringstream不应执行行结束转换。在写入/读取文件时发生。在内存缓冲区中进行转换是毫无意义的。其他事情正在发生,我们无法看到我们所得到的是什么。无论如何,不是一个副本(或者至少不是所用副本的副本)。道歉。如果我在留言时看到它被关闭了,我就会解锁它。您现在已经请求了gain,因此您不妨进行一些清理并删除原始文件。事实上,我没有正确阅读
stringstream
。我现在通过
ss.seekg(0,ios::end)使它工作起来
size\u t size=ss.tellg()
ss.seekg(0,ios::beg)
ss.read((char*)dest,size)