C++和 eof 中的文件读取

File reading in C++ and eof

本文关键字:文件 读取 eof C++      更新时间:2023-10-16

如果我在 c++ 中读取这样的文件:

//Begin to read a file
  FILE *f = fopen("vids/18.dat", "rb");
  fseek(f, 0, SEEK_END);
  long pos = ftell(f);
  fseek(f, 0, SEEK_SET);
  char *m_sendingStream = (char*)malloc(pos);
  fread(m_sendingStream, pos, 1, f);
  fclose(f);
  //Finish reading a file

我首先有两个问题:这是读取整个文件吗?(我希望它这样做),第二,我怎样才能创建一个持续到文件末尾的时间?我有:

while(i < sizeof(m_sendingStream))

但我不确定这是否有效,我一直在阅读(我以前从未用 c++ 编程过),我认为我可以使用eof()但显然这是不好的做法。

从文件读取时不需要循环,因为您将一次性获得代码的全部内容。当然,您仍然应该记录并检查返回值:

size_t const n = fread(buf, pos /*bytes in a record*/, 1 /*max number of records to read*/, f);
if (n != 1) { /* error! */ }

您还可以编写一个循环,在事先不知道文件大小的情况下读取直到文件末尾(例如,从管道或增长文件中读取):

#define CHUNKSIZE 65536
char * buf = malloc(CHUNKSIZE);
{
   size_t n = 0, r = 0;
   while ((r = fread(buf + n, 1 /*bytes in a record*/, CHUNKSIZE /*max records*/, f)) != 0)
   {
      n += r;
      char * tmp = realloc(buf, n + CHUNKSIZE);
      if (tmp) { buf = tmp; }
      else     { /* big fatal error */ }
   }
   if (!feof(f))
   {
      perror("Error reading file");
   }
}
这是

处理文件的 C 风格,C++样式是使用 fstream 库。

关于您的第二个问题,检查您是否在文件末尾的一个好方法是使用 feof 函数。