用于读写的二进制流C++不起作用

C++ binary fstream for read and write doesn't work

本文关键字:C++ 不起作用 二进制 读写 用于      更新时间:2023-10-16

示例代码:

typedef struct myStruct 
{
     int field;
} MyStruct;

功能:

fstream infile (filename.c_str(), ios::in | ios::out | ios::binary);
if (!infile.is_open())
{
    cout << "Error: Failed to open " << filename;
    return false;
}
MyStruct mystruc;
int size = sizeof(mystruc);
// get number of records in file
infile.seekg(0, ios::end);
int count = infile.tellg() / size;
infile.seekg(0,ios::beg);
for (int i = 0; i < count; ++i)
{
    infile.read(reinterpret_cast<char*>(&mystruc), size);
    if (infile.good())
    {
        mystruct.field += 100;
        infile.seekp(size*-1, ios::cur);
        infile.write(reinterpret_cast<char*>(&mystruc), size);
        //infile.flush(); 
    }
}
infile.close();

假设输入文件包含4条MyStruct记录和字段值123.4

输出是:101102102102

代替:101102103104

为什么seekp不起作用?它的工作原理,我刷新后每次写入,但不会刷新减慢功能?

您的结构应该使用pragma pack打包为1字节边界。另外,我很确定你不需要typedef

试试这样写:

#pragma pack(push,1)
struct myStruct 
{
     int field;
}
#pragma pack(pop)  // return to original packing