尚未在C ++中将struct写入二进制文件

时间:2019-04-22 18:09:13

标签: c++ binaryfiles

我想将一些结构写入二进制文件,但尚未编写。它写道,当我在十六进制查看器中查看文件时,文件大小大于0 buf,但看不到结构。它也没有被读取。我知道我已正确打开它,但没有发现问题。

示例:

enum CellType
{
    WHITE = 0,
    BLACK = 1,
    EMPTY = 2,
    OUT = 3
};
struct Cell {
    int nRow;
    int nCol;
    CellType type;
};

void main() {
    cout << "enter file name" << endl;

    cin >> fileName;
    ofstream fsBoardBinFile;
    fsBoardBinFile.open(fileName, ios::binary|ios::out);
    Cell s1 = { 1,1,BLACK };
   fsBoardBinFile.write(reinterpret_cast<char*>(&s1), sizeof(Cell));
    fsBoardBinFile.close();
}

1 个答案:

答案 0 :(得分:0)

使用Jesper Juhl建议的int main()并尝试 fsBoardBinFile.write(reinterpret_cast<char*>(&s1), sizeof(s)); 如果您使用的是std :: string,也请使用+运算符而不是strcat。由于您尚未包括什么CellType,因此将其删除。对于int:

fsBoardBinFile.write(reinterpret_cast<char*>(&s1), sizeof(s1));

将11(asci:11)而不是数字1(ascii:49)写入文件。使用

ifstream fsBoardBinFile1(fileName);
    fsBoardBinFile1<<((char*)&s2, sizeof(Cell));
    cout << s2.nRow << s2.nCol << endl;

将11打印到屏幕上,所以似乎工作正常。如果CellType出现问题,则需要更新代码以包含其内容。