С как проверить пустой ли файл
Перейти к содержимому

С как проверить пустой ли файл

  • автор:

Проверка на пустой файл в C ++

Есть ли простой способ проверить, является ли файл пустым. Например, если вы передаете файл функции, и вы понимаете его пустым, то сразу же закрываете его? Спасибо.

Изменить, я пробовал использовать метод fseek, но я получаю сообщение об ошибке «Не могу преобразовать ifstream в FILE *».

Мой параметр функции

7 ответов

Возможно, что-то похожее на:

Короткий и сладкий.

С учетом вашей ошибки другие ответы используют доступ к файлам в стиле C, где вы получаете FILE* с определенными функциями.

Напротив, мы с вами работаем с потоками С++ и поэтому не можем использовать эти функции. Вышеприведенный код работает простым способом: peek() заглянет в поток и вернет, не удаляя, следующий символ. Если он достигнет конца файла, он возвращает eof() . Ergo, мы просто peek() в потоке и видим, если он eof() , так как пустому файлу нечего заглядывать.

Примечание. Это также возвращает true, если файл никогда не открывается в первую очередь, что должно работать в вашем случае. Если вы этого не хотите:

Проверка на пустой файл

Я настоятельно рекомендую проверить приведенный ниже ответ @tee-dee, который на самом деле обеспечивает гораздо более точный способ определить, действительно ли файл пуст или нет, если вы имеете дело с текстовыми файлами. Большинство ответов здесь в значительной степени об использовании FileInfo.Length что правильно, но не выделяйте одну проблему с ним при работе с файлами, в конечном итоге содержащими метку порядка байтов (BOM). — Ayan

9 ответы

Проверить Существует свойство, чтобы узнать, существует ли файл вообще.

Протестировал. Это именно то, что я хочу. оценили и поставили галочку. Спасибо — аркадский

записки: new FileInfo( «file» ).Length бросит FileNotFoundException если файл не существует, поэтому, если есть случай, что файл не существует, обязательно проверьте Exists имущество перед проверкой Length . — Вальтер Стабош

Большая помощь. Спасибо! — дночерпатель

Проблема здесь в том, что файловая система изменчива. Учитывать:

Это может и происходит. Как правило, способ обработки сценариев файлового ввода-вывода заключается в том, чтобы переосмыслить процесс, чтобы использовать блоки исключений, а затем потратить время разработки на написание хороших обработчиков исключений.

Для программы ОП эти проблемы могут не вызывать беспокойства. «Лучшее — враг хорошего». — Брайан

FileInfo.Длина не будет работать во всех случаях, особенно для текстовых файлов. Если у вас есть текстовый файл, в котором раньше было какое-то содержимое, а теперь он очищен, длина может все еще не равняться 0, поскольку метка порядка байтов все еще может сохраняться.

Вы можете воспроизвести проблему, создав текстовый файл, добавив в него текст Unicode, сохранив его, а затем очистив текст и снова сохранив файл.

Теперь FileInfo.Длина покажет размер, отличный от нуля.

Решением для этого является проверка длины < 6 на основе максимального размера, возможного для знак порядка байтов. Если ваш файл может содержать один байт или несколько байтов, выполните чтение файла, если длина < 6, и проверьте размер чтения == 0.

Checking for an empty file in C++

Is there an easy way to check if a file is empty. Like if you are passing a file to a function and you realize it’s empty, then you close it right away? Thanks.

Edit, I tried using the fseek method, but I get an error saying ‘cannot convert ifstream to FILE *’.

My function’s parameter is

11 Answers 11

Perhaps something akin to:

Short and sweet.

With concerns to your error, the other answers use C-style file access, where you get a FILE* with specific functions.

Contrarily, you and I are working with C++ streams, and as such cannot use those functions. The above code works in a simple manner: peek() will peek at the stream and return, without removing, the next character. If it reaches the end of file, it returns eof() . Ergo, we just peek() at the stream and see if it’s eof() , since an empty file has nothing to peek at.

Note, this also returns true if the file never opened in the first place, which should work in your case. If you don’t want that:

Как я могу узнать, что текстовый файл пуст или нет? (На C)

Я пытаюсь определить, является ли текстовый файл пустым или нет в C. (значения инициализируются в NULL). Каждый раз при чтении первым значением (с использованием fscanf) он всегда возвращает файл с нулевым значением, даже если он имеет значение «0» или «пусто» «.

Как я могу узнать, что целевой текстовый файл пуст или нет? (его следует различать, даже если в первой букве стоит «0»)

3 ответа

Если файл был успешно открыт для чтения в соответствии с fopen(filename, «r») , вы можете проверить, пуст ли он перед любой операцией чтения следующим образом:

ungetc() гарантированно работает как минимум с одним персонажем. Вышеупомянутая функция вернет 1 , если файл пуст или его нельзя прочитать из-за ошибки ввода-вывода. Вы можете определить это, проверив ferr(fp) или feof(fp) .

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

Если файл является обычным файлом, вы также можете использовать системный API для определения размера файла, например stat , lstat , fstat (в системах Posix).

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *