用C+读取文件+;和eof 如果我在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

用C+读取文件+;和eof 如果我在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,c++,file-io,eof,C++,File Io,Eof,首先,我有两个问题:这是读取整个文件吗?(我希望它这样做),第二,我怎样才能创建一段持续到文件末尾的时间?我有: while(i,但是显然这是一个坏的实践。< /P> < P>在从一个文件中读取时,不应该有一个循环,因为你将一次使用代码来获取整个内容。当然,您仍应记录并检查返回值: size_t const n = fread(buf, pos /*bytes in a record*/, 1 /*max number of records to read*/, f); if (n != 1)

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

while(i


但是我不确定这是否可行,我一直在阅读(我以前从来没有用C++编程),我认为我可以使用<代码> EFF()/Cube >,但是显然这是一个坏的实践。< /P> < P>在从一个文件中读取时,不应该有一个循环,因为你将一次使用代码来获取整个内容。当然,您仍应记录并检查返回值:

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

if (n != 1) { /* error! */ }
您还可以编写一个循环,在不事先知道文件大小的情况下一直读取到文件末尾(例如,从管道或正在增长的文件中读取):


这是C文件处理的样式,C++样式将使用库。< /P>


关于第二个问题,检查文件结束的好方法是使用函数。

这不是C++,实际上这是C。我有人告诉我它是C++,有些告诉我C是我真的还不能区别。这种文件的工作风格是C风格。在C++中使用文件主要是使用FScript库。你可以阅读更多关于使用C++的文件:谢谢你:我会看一看。that@LuisArmando这是因为它实际上是完全有效的C++。它不使用C++标准的IoStand库,不把它作为不C++而取消,这与流行的观点相反。事实上,直到C99,这必须用C++编译,因为内联变量声明和单行注释会在标准的C89编译器上呕吐。我不太明白,所以我可以在IF内添加IF?@ LuiSARMADO:没有“while”。要么你像我一样有一个检查,要么你写一个循环(但没有“如果”)。这样我就可以在我的
long pos=…
行之前添加你的
size\t const…
行,然后我就可以像你一样使用一个检查,或者使用一个
n!=pos
我做对了吗?@LuisArmando:没有。一张支票代替了你现有的
fread
行。但我还添加了一个假设循环。记住,这真的毫无意义。@LuisArmando:为什么不问问另一个问题的作者呢?或者阅读手册并亲自检查?不,他不会读取1字节,他会准确读取1字节的大记录。
#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");
   }
}