fstream相当于fstream

时间:2012-11-21 06:15:56

标签: c++ c

在C中,人们可以写(无视任何目的的检查)

const int bytes = 10;
FILE* fp = fopen("file.bin","rb");
char* buffer = malloc(bytes);
int n = fread( buffer, sizeof(char), bytes, fp );
...

n将包含读取的实际字节数,该字节数可能小于10(字节)。

你如何在C ++中做同等的事情?

我有这个,但它似乎不是最理想的(感觉如此冗长并且有额外的I / O),还有更好的方法吗?

  const int bytes = 10;
  ifstream char> pf("file.bin",ios::binary);
  vector<char> v(bytes);

  pf.read(&v[0],bytes);
  if ( pf.fail() )
  {
    pf.clear();
    pf.seekg(0,SEEK_END);
    n = static_cast<int>(pf.tellg());
  }
  else
  {
    n = bytes;
  }

  ...

3 个答案:

答案 0 :(得分:5)

致电read后直接致电gcount会员功能。

pf.read(&v[0],bytes);
int n = pf.gcount();

答案 1 :(得分:2)

根据http://www.cplusplus.com/reference/iostream/istream/read/

  

istream& read(char* s, streamsize n);

     

读取数据块
  读取n个字符的数据块并将其存储在s指向的数组中。

     

如果在读取n个字符之前达到文件结尾,则该数组将包含读取的所有元素,并且将设置failbit和eofbit(可以分别使用成员fail和eof进行检查)

     

请注意,这是一个未格式化的输入函数,提取的内容不会存储为c字符串格式,因此在字符序列的末尾不会附加结尾的空字符。

     

在此函数之后调用成员gcount可以获取读取的字符总数。

所以pf.gcount()告诉你读了多少字节。

答案 2 :(得分:1)

pf.read(&v[0],bytes);

streamsize bytesread =  pf.gcount();