2012-12-31 33 views
1

我正在研究使用C(StormLib)編寫的庫的C++應用程序。該庫有一個功能來讀取文件到void* buffer(我猜char[])。我想將其發送到不同的庫進行處理。希望可以用boost::iostreams::stream_bufferboost::asio::streambuf之類的東西來完成,以便將文件存儲爲通過任何方法需要讀取。可能與memcpy一起使用istream

我已經嘗試只是在istream的傳遞(具有boost::asio::streambuf開放)的功能和它給了我一個BADACCESS,因爲它試圖執行

memcpy((theFile),(myiStream),(full size of the file))

我基本上會像某種「一袋一袋「的對象,可以很容易地轉移到不同的方法來結構化的數據轉換,但我不知道我應該如何實現它。

回答

0

一旦你用C++重新創建數據,你想怎麼做?如果你只是想要原始數據,那麼你可以(例如)創建一個std::vector<char>, resize,因此它足夠大以容納所有數據*,然後將指針傳遞給它的第一個元素。


*您如何判斷「夠大」是一個不同的問題...

+0

我想將它交給庫來使用ImageMagick或FFMPEG的數據轉換(根據文件類型),然後將結果寫入文件。 對象的大小可以從3KB到500MB + –

+0

@ user1939612:這聽起來像你只是想要一些東西來保存任意數據。所以像'std :: vector'這樣的東西就可以實現。 –

+0

看來工作,與StormLib 這樣做專供將來參考 '的std ::矢量 fileBuffer;'' fileBuffer.resize(SFileGetFileSize(文件句柄,NULL));'' HANDLE句柄;'' 如果( !'File',FileFileSize(fileHandle,NULL),NULL,NULL))' '''throw'無法讀取文件到內存';' ''' –

相關問題