如何通过给定的bin文件在C ++中打开和读取二进制文件?

时间:2016-07-15 20:05:46

标签: c++ binaryfiles ifstream ofstream

是否有人可以帮助我查看我做错的地方?或解释原因?我是初学者,我尽力打开二进制文件。但它只是用完了“文件打开”“0”。没什么出来的。

目标: Count3s程序打开一个包含32位整数(int)的二进制文件。您的程序将计算此数字文件中值3的出现次数。您的目标是了解打开和访问文件以及应用控制结构的知识。包含程序使用的数据的文件名是“threesData.bin”。

我的代码如下,如果您知道,请帮助我。提前谢谢!

#include <iostream>
#include <fstream>
using namespace std;

int main()
{
int count=0 ;
ifstream myfile;
myfile.open( "threesData.bin", ios::in | ios :: binary | ios::ate);

if (myfile)
{
    cout << "file is open " << endl;
    cout << count << endl;    }

else 
    cout << "cannot open it" << endl;


return 0;    
}

1 个答案:

答案 0 :(得分:1)

首先,您应该使用

读取以二进制模式打开的文件
  myfile.read (buffer,length);

其中buffer应定义为

  int data;

并用作

  myfile.read (&data,sizeof(int));

第二个重点是从文件读取多个数字 - 您需要通过检查流的条件控制的循环。例如:

  while (myfile.good() && !myfile.eof())
  {
       // read data
       // then check and count value
  }

最后一件事,你应该在完成阅读后关闭文件,即成功操作:

  myfile.open( "threesData.bin", ios::binary); 
  if (myfile)
  {
       while (myfile.good() && !myfile.eof())
       {
           // read data
           // then check and count value
       }
       myfile.close();
       // output results
   }

还有一些额外的提示:

1)int并非总是32位类型,因此请考虑使用int32_t中的<cstdint>;如果你的数据有超过1个字节,可能是字节顺序很重要,但在任务描述中没有提到

2)read允许每次调用读取多个数据对象,但在这种情况下,您应该读取数组而不是一个变量

3)阅读并尝试referencesthis等其他可用资源的示例。