2009-08-29 116 views
6

我在內存中的char []緩衝區中有一個jpeg圖像,我所需要做的就是將它完全按照原樣寫入磁盤。現在我正在這樣做爲什麼C++ ofstream write()方法修改我的原始數據?

ofstream ofs; 
ofs.open(filename); 
ofs.write(buffer, bufferLen); 
ofs.close(); 

但圖像不出來正確,它看起來亂碼隨機黑白條紋到處。在用十六進制查看器比較圖像和原始圖像之後,我發現當它正在寫一個換行符時,該流正在修改數據。在原始位置顯示0x0A的任何地方,ofstream寫爲兩個字節:0x0D0A。我必須假設thestream正打算從LF轉換到CRLF,有沒有一種標準的方式來讓它不這樣做?

回答

9

你應該設置文件模式binary當你opening它:

std::ofstream file; 
file.open("filename.jpg", std::ios_base::out | std::ios_base::binary); 

這樣的流沒有按不要嘗試將換行符調整爲原生文本格式。

5

嘗試以二進制形式打開ofstream。 像這樣的東西應該工作:

ofstream ofs; 
ofs.open(filename, ios::out | ios::binary); 
ofs.write(buffer, bufferLen); 
ofs.close(); 
1

既然你是不是用二進制模式打開該文件,將其設置爲默認格式的輸出。在格式化輸出中,您的實現將按照您所描述的方式執行行尾字符的轉換。

-2

我希望我可以讓我的版本寫任何東西...沒有錯誤,沒有抱怨,當你調試它沒有錯,但它甚至不嘗試和創建文件。 fopen,fwrite和fclose到底怎麼了...我從來沒有遇到過問題

相關問題