c++ - 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:\\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
推荐阅读
- google-cloud-firestore - 什么是 Cloud Firestore 存储数据配额?
- python - Python 中的 HTML 消息
- django - 在 Django CBV 中调用 DetailView 时,是否仍然可以在 has_permission 方法中获取当前对象
- angular - 角材料安装 +
- php - 如何使 php regex preg_replace 工作
- python - 按特定列对数据进行分组,然后将行值拆分为不同的列
- javascript - 在 Nodejs 中同时使用 Currying 和 Module.export
- excel - 为什么我的 Excel 公式只从范围中取一个值?
- java - MainActivity 无法强制转换为 android.app.TimePickerDialog$OnTimeSetListener 无法解决
- html - 如何编辑输入框的占位符文本?