首页 > 解决方案 > C++ 二进制流

问题描述

我必须在这里遗漏一些简单的东西,但我正在尝试用 C++ 编写和读取二进制文件。

    ofstream file3("C:\\data2.txt", ios::out | ios::binary);
for (int i = 0; i < 100; i++) {
    file3.write((char*)(&i), sizeof(int));
}

ifstream file4("C:\\data2.txt", ios::in | ios::binary);

int temp;
while (!file4.eof()) {
    file4.read((char*)(&temp), sizeof(int));
    cout << temp << endl;
}

使用十六进制编辑器查看时,该文件看起来像是正确创建的。但是,当我阅读文件时,它会读取 1 个随机垃圾值并退出,而不是列出所有数字。

更新

我根据评论做了一点更新,现在一切看起来都很好。在 Windows 上,关闭产生了影响,我确实修复了循环条件。

    ofstream file3("C:\\data2.txt", ios::out | ios::binary);
for (int i = 0; i < 100; i++) {
    file3.write((char*)(&i), sizeof(int));
}

file3.close();
ifstream file4("C:\\data2.txt", ios::in | ios::binary);

//cout << file4.eof();
int temp;
while (!file4.read((char*)(&temp), sizeof(int)).eof()) {
    cout << temp << endl;
}

标签: c++fileiobinary

解决方案


您可能没有写入权限c:\\file,因此您应该检查是否可以。至于使用.eof()这个话题。最后,您可能希望在再次打开文件进行阅读之前关闭该文件。这是您调整的示例:

#include<iostream>
#include<fstream>

int main()
{
    std::ofstream file3("data2.txt", std::ios::binary);
    if (file3)
    {
        for (int i = 0; i < 100; i++)
        {
            file3.write((char*)(&i), sizeof(int));
        }
        file3.close();
    }

    std::ifstream file4("data2.txt", std::ios::binary);

    int temp;
    while (file4)
    {
        file4.read((char*)(&temp), sizeof(int));
        std::cout << temp << std::endl;
    }
}

演示:http ://coliru.stacked-crooked.com/view?id=8f519fcd05879855


推荐阅读