Если я читаю файл в 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
У меня есть 2 вопроса: это чтение всего файла? (Я хочу, чтобы это было так), а во-вторых, как я могу создать время, которое продолжается до достижения конца файла? Я имею:
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");
}
}