3
我試圖從包含純文本標頭的圖像文件中去除標頭,然後是二進制圖像信息。作爲此前提,我想將文件信息複製到字符串流中進行編輯。當這樣做時,我遇到了一些問題,這些問題導致我嘗試簡單地讀取文件並將其作爲新文件重新寫回以用於調試目的。當我這樣做時,新文件最終比原文大1kb。在UltraEdit中進行二進制比較時,似乎在任何十六進制字符0A(換行符相信)出現的地方,我的程序似乎已在0D(回車符)之前添加。我想知道這種行爲的原因是什麼以及如果可能的話如何避免它。代碼片段如下:使用ifsream和stringstream複製二進制文件時出錯
....
std::string inputFilename = argv[1];
std::ifstream in(argv[1],ios::out | ios::binary);
if (in)
{
std::stringstream fileStream;
fileStream<<in.rdbuf();
cout<<fileStream.str().length(); //debugging
in.close();
ofstream myfile;
myfile.open("selfoutput");
myfile<<fileStream.str();
myfile.close();
....
感謝您的幫助! -David
該標誌位於'std :: ifstream'上。但是,它缺少來自std :: ofstream的'open()'。 –
嗯。我不會來那麼遠。我的觀點是,他打開ifstream輸出... – sehe
他正在爲輸入和輸出打開'std :: ifstream'。這沒有什麼特別的意義,但不是實際的問題。實際的問題是不用'std :: ios_base :: binary'選項打開'std :: ofstream'。 –