Как определить размер файла на C?
Если вы хотите fsize() распечатать сообщение об ошибке, вы можете использовать это:
В 32-битных системах вы должны скомпилировать это с опцией -D_FILE_OFFSET_BITS=64 , иначе off_t будет содержать только значения до 2 ГБ. См. Подробности в разделе «Использование LFS» в статье « Поддержка больших файлов в Linux» .
Не используйте int . Файлы размером более 2 гигабайт в наши дни стали обычным явлением
Не используйте unsigned int . Файлы размером более 4 гигабайт обычно встречаются как немного менее распространенная грязь.
IIRC стандартная библиотека определяет off_t как 64-битное целое число без знака, которое следует использовать всем. Мы можем переопределить это значение до 128 бит через несколько лет, когда мы начнем иметь файлы размером 16 эксабайт.
Если вы работаете в Windows, вам следует использовать GetFileSizeEx — он фактически использует 64-битное целое число со знаком, поэтому они начнут сталкиваться с проблемами с 8-ми эксабайтными файлами. Глупый Microsoft! 🙂
Решение Мэтта должно работать, за исключением того, что это C ++ вместо C, и в первоначальном сообщении нет необходимости.
Поправил и скобу для тебя. 😉
Обновление: это не лучшее решение. В Windows он ограничен файлами размером 4 ГБ и, вероятно, медленнее, чем простой вызов для конкретной платформы, например GetFileSizeEx или stat64 .
Цитата из стандартного документа C99, который я нашел в Интернете: «Установка индикатора положения файла на конец файла, как и в случае fseek(file, 0, SEEK_END) , имеет неопределенное поведение для двоичного потока (из-за возможных завершающих нулевых символов) или для любого потока с кодированием, зависящим от состояния это не обязательно заканчивается в начальном состоянии сдвига. **
Измените определение на int, чтобы можно было передавать сообщения об ошибках, а затем используйте fseek() и ftell() для определения размера файла.
Как узнать размер файла c
Q: Как узнать размер файла?
A:Один их самых простых способов узнать размер файла — открыть его и прочитать до конца. Количество прочитанных байт и будет реальным размером файла.
Сделать это можно вручную, а можно одной из готовых функций, некоторые из которых тем не менее реализованы именно таким способом.
[!] Чтобы получить верный результат для всех типов файлов (текстовых и бинарных), необходимо открывать файл в бинарном режиме. Это связано с тем, что в текстовом режиме комбинации '\r\n' при чтении преобразуются в '\n'.
Как получить размер файла на C++? [дубликат]
давайте создадим дополнительный вопрос этот. Какой самый простой способ получить размер файла в C++? Перед ответом убедитесь, что он переносим (может быть выполнен на Unix, Mac и Окна), надежный, простой в понимании и без библиотечных зависимостей (без boost или qt, но, например, glib в порядке, поскольку это портативная библиотека).
7 ответов
см.http://www.cplusplus.com/doc/tutorial/files/ для получения дополнительной информации о файлах на C++.
хотя это не обязательно самый популярный метод, я слышал, что метод ftell, fseek не всегда может давать точные результаты в некоторых обстоятельствах. В частности, если уже открытый файл используется, и размер должен быть разработан на этом, и он будет открыт как текстовый файл, то он выдаст неправильные ответы.
следующие методы всегда должны работать, поскольку stat является частью библиотеки времени выполнения c в Windows, Mac и Linux.
на некоторых в системах также есть stat64 / fstat64. Поэтому, если вам это нужно для очень больших файлов, вы можете посмотреть на них.