如果我正在读这样的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()
但显然这是不好的做法。
答案 0 :(得分:2)
从文件读取时不需要循环,因为您将一次性获取代码的全部内容。您当然应该记录并检查返回值:
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");
}
}
答案 1 :(得分:1)