Если файл был успешно открыт для чтения, в соответствии с fopen(filename, "r")
, вы можете проверить, если он пуст, прежде чем какой-либо операции чтения таким образом:
int is_empty_file(FILE *fp) {
int c = getc(fp);
if (c == EOF)
return 1;
ungetc(c, fp);
return 0;
}
ungetc()
гарантированно работайте хотя бы на одного персонажа. Вышеуказанная функция вернет 1
, если файл пуст или если его невозможно прочитать из-за ошибки ввода-вывода. Вы можете определить, какие из них можно проверить: ferr(fp)
или feof(fp)
.
Если файл представляет собой поток, связанный с устройством или терминалом, тестовый код будет блокироваться, пока не будет прочитан хотя бы один байт, или будет сигнализирован конец файла.
Если файл является обычным файлом, вы можете также использовать определенную систему API для определения размера файла, например stat
, lstat
, fstat
(на системах Posix).
Должно быть EOF, не так ли? –
Проверьте, не равен ли размер файла нулю? –
Кроме того, это помогло бы, если бы вы могли рассказать нам, что вы на самом деле делаете *! Предпочтительно, создавая [Минимальный, Полный и Подтверждаемый пример] (http://stackoverflow.com/help/mcve). Также укажите фактическое содержимое файла, если оно есть. И, наконец, пожалуйста, [прочитайте о том, как задавать хорошие вопросы] (http://stackoverflow.com/help/how-to-ask), если вы еще этого не сделали. –