Чтение файлов в 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

У меня есть 2 вопроса: это чтение всего файла? (Я хочу, чтобы это было так), а во-вторых, как я могу создать время, которое продолжается до достижения конца файла? Я имею:

while(i < sizeof(m_sendingStream))

но я не уверен, что это работает, я читал вокруг (я никогда не программировал на C ++ раньше), и я думал, что мог бы использовать eof() но, видимо, это плохая практика.

1

Решение

Цикл не должен быть необходим при чтении из файла, так как вы получите все содержимое вместе с вашим кодом за один раз. Вы все еще должны записать и проверить возвращаемое значение, конечно:

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");
}
}
2

Другие решения

Это стиль C для работы с файлами, стиль C ++ будет использовать fstream библиотека.

И о вашем втором вопросе, хороший способ проверить, находитесь ли вы в конце файла или нет, было бы использовать feof функция.

1

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector