我使用的是使用C ++ std :: fstream的文件,我很难理解流的定位。我提取了一个示例代码来说明问题:
#include <iostream>
#include <fstream>
#include <string>
int main() {
std::fstream f;
std::string path = "test1.txt";
f.exceptions(std::ios_base::badbit | std::ios_base::failbit | std::ios_base::eofbit);
try {
f.open(path, std::ios_base::in | std::ios_base::out | std::ios_base::binary | std::ios_base::ate);
} catch (std::ios_base::failure &e) {
std::cout << "Creating new file" << std::endl;
f.open(path, std::ios_base::in | std::ios_base::out | std::ios_base::binary | std::ios_base::trunc);
f.write("012345678\n", 10);
return 0;
}
size_t fileSize = f.tellg();
std::cout << fileSize << std::endl;
f.seekg(0);
f.seekp(0);
char dataBuffer[8];
f.read(dataBuffer, 8);
f.write("a\n", 2);
return 0;
}
我希望这段代码能够创建和维护一个10字节长的文件,但实际上每次运行程序时文件都会增加2个字节。任何人都可以解释为什么会这样吗?
我正在使用Apple LLVM编译器:
g ++ -v
配置为: - prefix = / Library / Developer / CommandLineTools / usr --with-gxx-include-dir = / usr / include / c ++ / 4.2.1
Apple LLVM版本9.0.0(clang-900.0.39.2)
目标:x86_64-apple-darwin17.4.0
修改
它在g ++上工作正常,奇怪的行为来自clang ++(clang 5.0测试)。