Есть ли подводные камни для конкретных операционных систем, о которых я должен знать?
Есть много дубликатов ( 1 , 2 , 3 , 4 , 5 ) этого вопроса, но ответы на них были даны несколько десятилетий назад. Сегодняшние ответы на многие из этих вопросов неверны.
Методы из других (старых QA) на .sx
stat.h (оболочка sprintstatf ), использует системный вызов
tellg () возвращает по определению позицию, но не обязательно байты . Тип возврата - нет
int
.
c++
c++17
filesize
c++-standard-library
Йонас Штайн
источник
источник
tellg
проблемах. Единственный, над которым стоит возиться, - это четвертый, и он не очень хорош, так как он слишком много говоритofstream
как в вопросе, так и в ответах на него. Этот намного лучше выражает намерение, чем другие (за исключением первого, который на удивление закрыт).stat(2)
? Он стал слишком старым или как?stat(2)
Это не часть языкового стандарта.Ответы:
<filesystem>
(добавлен в C ++ 17) делает это очень простым .Как отмечено в комментариях, если вы планируете использовать эту функцию, чтобы решить, сколько байтов читать из файла, имейте в виду, что ...
источник
std::uintmax_t
можно будет держать больше ценностей чемstd::size_t
? Если нет, почему бы не использоватьstd::size_t
, что, возможно, более узнаваемо? +1 к ответу, кстатиfile_size
возвращается. Мне тоже это выглядит немного странно.std::size_t
требуется только для хранения максимального размера объектов памяти. Файлы могут быть значительно больше,size_t
это 32 бита, аuintmax_t
это 64 бита.C ++ 17 приносит
std::filesystem
упростить выполнение множества задач с файлами и каталогами. Вы можете не только быстро получить размер файла, его атрибуты, но и создать новые каталоги, перебирать файлы, работать с объектами пути.Новая библиотека дает нам две функции, которые мы можем использовать:
Первая функция - это бесплатная функция в
std::filesystem
, вторая - метод вdirectory_entry
.У каждого метода также есть перегрузка, поскольку он может вызвать исключение или вернуть код ошибки (через выходной параметр). Ниже приведен подробный код, объясняющий все возможные случаи.
источник