簡體   English   中英

如何在不創建文件的情況下獲取由外部庫寫入 ostream 的原始字節

[英]How to get raw bytes written to ostream by an external library without creating a file

(我以前的問題被關閉的的副本是否有二進制存儲器用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 added file

這有效。 但我希望能夠在不創建文件的情況下在內存中創建一個 zip。 我嘗試使用stringstream而不是ofstream ,我在 zip 文件中的數據中得到額外的換行符已損壞。 我可以使用任何其他流嗎?

(如果有人仍然認為它是重復的,我需要一個解釋,因為我不明白這個其他問題對我有什么幫助)

如果您使用的是 linux,如何使用memfd_create創建匿名文件? 然后你可以打開/proc/self/fd/<fd>並做你的事情。 std::ofstream某些實現甚至可能提供一個帶有 FILE* 的構造函數,您可以檢查您的系統是否是這種情況。

使用std::stringstream -- 這將創建一個內存中字符串,您可以將其作為 ostream 寫入,並且不會添加額外的換行符。 如果稍后將字符串復制到以文本模式打開的 fstream(例如 std::cout),那么該過程可能會添加額外的 CR 字符,這些字符不在字符串中(也不在原始輸出中)。

如果你看到額外的字符破壞了你的流,它們來自其他地方——除了你壓縮 call/lib 之外的東西正在寫入流,或者你如何看待你的流正在做一些事情。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM