鉴于以下代码:是定义的流实现的默认模式吗?
std::ofstream stream("somefile");
if (!stream)
{
return 1;
}
当调用.WRITE(....)和使用STDC++和的libC++流处于二进制模式(std::ios::binary
)。
使用当MSVC(2015/2017RC1)它似乎是在文本模式或奇怪的东西,因为生成的文件比实际写入大。然而。
但是,如果我明确地设置模式std::ios::binary
MSVC的行为类似于前面提到的其他标准库的std::ofstream
实现。
示例代码:
expect: 32
file size: 33
输出,用于当与libc的运行++上面的代码,STDC++::
expect: 32
file size: 32
#include <vector>
#include <cstdio>
#include <fstream>
std::size_t fsz(const char* filename) {
std::ifstream in(filename, std::ifstream::ate | std::ifstream::binary);
return static_cast<std::size_t>(in.tellg());
}
int main() {
std::ofstream stream("filename");
if (!stream)
return 1;
std::vector<unsigned long long int> v = {0x6F1DA2C6AC0E0EA6, 0x42928C47B18C31A2, 0x95E20A7699DC156A, 0x19F9C94F27FFDBD0};
stream.write(reinterpret_cast<const char*>(v.data()),v.size() * sizeof(unsigned long long int));
stream.close();
printf("expect: %d\n", v.size() * sizeof(unsigned long long int));
printf("file size: %d\n", fsz("filename"));
return 0;
}
输出用于上述代码时用MSVC运行
区别可以得到m这取决于写入的数据量和数据的内容。
最后我的问题仍然是一样的,是不确定的还是不明确的行为?
将上述向量更改为以下内容使得该示例对于发生了什么更为明显。
std::vector<unsigned long long int> v = {0x0A0A0A0A0A0A0A0A, 0x0A0A0A0A0A0A0A0A, 0x0A0A0A0A0A0A0A0A, 0x0A0A0A0A0A0A0A0A};
请描述_exactly_你看到了什么。多大?该文件包含什么内容?你的'write()'调用在哪里?出示[MCVE]。 –
@LightnessRacesinOrbit我已经添加了一个例子。 –