2015-11-04 71 views
1

我已經讀了很多關於在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 []嗎?

+1

您顯示的代碼絕對不起作用,至少不如您期望的那樣。當你這樣做時'outTestFile.write((char *)&testArray,8192);'你編寫'testArray' *對象*而不是'testArray'封裝的實際數組。讀取和寫入功能可以讀取和寫入任意數據,它不一定是C風格的數組(正如您從錯誤代碼中看到的那樣)。例如,要寫一個整數值,你可以做例如'outTestFile.write(reinterpret_cast (&intVariable))' –

+0

嗯,在我的機器上工作正常,但這就是爲什麼我問:確定。謝謝您的回覆。 編輯:是的,我知道如何讀取和寫入二進制另一種類型的數據(大部分數字)。 –

+0

@JoachimPileborg由於std :: array可能除數據外沒有其他成員,程序將按預期工作。儘管一般這樣做是一個糟糕的主意。 – 2015-11-04 16:13:46

回答

5

使用std::array::data

testFile.read(testArray.data(), testArray.size()); 
outTestFile.write(testArray.data(), testArray.size()); 

注意使用.size(),而不是一個神奇的數字。

你也不需要.close()你的文件。 fstream析構函數會爲你做到這一點。

+0

非常感謝。我想有時候我真的需要使用一些數字,特別是當我不寫整個數組時。我會牢記fstream析構函數爲我做所有的工作。謝謝 ! –