std::数组和字节读取 我读过很多关于C++中没有使用C风格的东西,但是使用了像STD::Str::vector或STD::String。

std::数组和字节读取 我读过很多关于C++中没有使用C风格的东西,但是使用了像STD::Str::vector或STD::String。,c++,c++11,fstream,stdarray,C++,C++11,Fstream,Stdarray,现在我正在尝试用文件流读写小型二进制文件,并将其存储在std::array中 看起来std::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:

现在我正在尝试用文件流读写小型二进制文件,并将其存储在std::array中

看起来std::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[]吗?

使用:

请注意使用
.size()
而不是幻数

您也不需要
.close()
您的文件。
fstream
析构函数将为您执行此操作。

使用:

请注意使用
.size()
而不是幻数


您也不需要
.close()
您的文件。
fstream
析构函数将为您执行此操作。

您显示的代码肯定不起作用,至少不像您预期的那样。当您这样做时,例如,
outTestFile.write((char*)&testArray,8192)
编写
testArray
对象,而不是
testArray
包装的实际数组。读写函数可以读写任意数据,它不必是C型数组(正如您从错误代码中看到的)。例如,要编写一个整数值,您可以执行以下操作:例如,
outTestFile.write(reinterpret\u cast(&intVariable))
在我的机器上可以正常工作,但这就是为什么我问:请确定。谢谢你的回复。编辑:是的,我知道如何读写其他类型的二进制数据(大多数数字)。@JoachimPileborg因为std::array可能除了数据之外没有其他成员,所以程序将按预期工作。虽然一般来说这样做是个坏主意,但你展示的代码肯定不起作用,至少不像你预期的那样。当您这样做时,例如,
outTestFile.write((char*)&testArray,8192)
编写
testArray
对象,而不是
testArray
包装的实际数组。读写函数可以读写任意数据,它不必是C型数组(正如您从错误代码中看到的)。例如,要编写一个整数值,您可以执行以下操作:例如,
outTestFile.write(reinterpret\u cast(&intVariable))
在我的机器上可以正常工作,但这就是为什么我问:请确定。谢谢你的回复。编辑:是的,我知道如何读写其他类型的二进制数据(大多数数字)。@JoachimPileborg因为std::array可能除了数据之外没有其他成员,所以程序将按预期工作。虽然总的来说这样做是个坏主意。非常感谢。我想有时候我真的需要使用一些数字,特别是当我没有编写整个数组时。我会记住fstream析构函数为我做所有的工作。谢谢非常感谢你。我想有时候我真的需要使用一些数字,特别是当我没有编写整个数组时。我会记住fstream析构函数为我做所有的工作。谢谢
typedef char byte_t;
testFile.read(testArray.data(), testArray.size());
outTestFile.write(testArray.data(), testArray.size());