我已經讀了很多關於在C++中不使用C風格的東西,而是使用了像std :: array,std :: vector或std :: string這樣的容器。std ::數組和字節讀取
現在我正在嘗試讀取和寫入文件流的小二進制文件,並將其存儲在std :: array中。
它看起來像從性病的讀取和寫入方法:: fstream的可與C風格的數組只工作...
原來這就是我想:
int main(int argc, char **argv)
{
std::fstream testFile, outTestFile;
testFile.open("D:/mc_svr/another/t/world/region/r.0.0.mca", std::fstream::in | std::fstream::binary);
outTestFile.open("D:/mc_svr/another/t/world/region/xyz.xyz", std::fstream::out | std::fstream::binary);
std::array<byte_t, 8192> testArray;
testFile.read((char*) &testArray, 8192);
outTestFile.write((char*) &testArray, 8192);
testFile.close();
outTestFile.close();
return 0;
}
byte_t只是a
typedef char byte_t;
它的工作原理。但這是做這件事的好方法嗎?如果不是,還有其他方法可以做到嗎?我應該使用byte_t []嗎?
您顯示的代碼絕對不起作用,至少不如您期望的那樣。當你這樣做時'outTestFile.write((char *)&testArray,8192);'你編寫'testArray' *對象*而不是'testArray'封裝的實際數組。讀取和寫入功能可以讀取和寫入任意數據,它不一定是C風格的數組(正如您從錯誤代碼中看到的那樣)。例如,要寫一個整數值,你可以做例如'outTestFile.write(reinterpret_cast(&intVariable))' –
嗯,在我的機器上工作正常,但這就是爲什麼我問:確定。謝謝您的回覆。 編輯:是的,我知道如何讀取和寫入二進制另一種類型的數據(大部分數字)。 –
@JoachimPileborg由於std :: array可能除數據外沒有其他成員,程序將按預期工作。儘管一般這樣做是一個糟糕的主意。 – 2015-11-04 16:13:46