Задача определения размера файла на C++. Для определения размера файла, в данном стучае, самого себя. Нужно узнать путь к себе. Затем открыть файл на чтение, переместить указатель на первый байт, и считываит каждый последовательный байт прибавляю единицу к счетчику размера файла. Сколько единиц будет у счетчика, когд аон доберется до конца файла, столько и будет байт в файле.
Ниже приведены примеры для Visual C++ и Borland C++ Builder.
Только если файл больше 500мб на определение его размера может уйти около минуты, что не есть хорошо. Поэтому лучше после открытия переместить указатель в конец файла:
и получить текущую позицию указателя:
Комментарий от andry [ 29 апреля, 2013, 05:39 ]
Проблема только в том, что размеры в первом и втором варианте не совпадают — как раз на количество переводов строк. Это если текстовый файл создан, например, в Notepad-е. Т.е. если перевод строк это два символа.
Измерение размера заданного файла в байтах килобайтах и мегабайтах
Помощь в написании контрольных, курсовых и дипломных работ здесь.
Как подсчитать размер файла в байтах, килобайтах, мегабайтах и т.п Итак, в форме программы должен выводится размер файла в зависимости от которого, показатель будет.
Измерьте объем следующего информационного сообщения в битах, байтах, килобайтах и мегабайтах 1 )Измерьте объем следующего информационного сообщения в битах, байтах, килобайтах и мегабайтах:… И.
Вводится с клавиатуры размер файла байтах,определить и вывести на экран значение в килобайтах? Вводится с клавиатуры размер файла байтах,определить и вывести на экран значение в килобайтах?
Отображение размера файла в kB, MB или GB в зависимости от величины его размера в байтах добрый вечер! У меня есть значение размера файлов в байтах. Подскажите, как отобразить размера.
Решение
Specializations of the class template std::fpos identify absolute positions in a stream or in a file. Each object of type fpos holds the byte position in the stream (typically as a private member of type std::streamoff) and the current shift state, a value of type State (typically std::mbstate_t).
The following specializations of std::fpos are provided: Type Definition streampos std::fpos ::state_type> wstreampos std::fpos ::state_type>
Помощь в написании контрольных, курсовых и дипломных работ здесь.
Получение фактического размера и размера файла в байтах Здравствуйте, уважаемые форумчане! Мне необходимо получить фактический размер, занимаемый файлом на.
Использовать системный вызов stat(2) для вывода на экран размера файла в байтах програму L1_stat.c, яка використовує системний виклик stat(2) для виводу на экран розміру файла в.
Использовать системный вызов stat(2) для вывода на экран размера файла в байтах помогите L1_stat.c, яка використовує системний виклик stat(2) для виводу на экран розміру файла в.
генерация изображения заданного веса в килобайтах привет.. подскажите.. как генерировать gif картинку средствами php так чтобы можно было задать.
Есть ли подводные камни для конкретных операционных систем, о которых я должен знать?
Есть много дубликатов (1, 2, 3, 4, 5) этого вопроса, но они были даны ответы десятилетия назад. Очень многие проголосовавшие ответы на многие из этих вопросов сегодня неверны.
stat.h (оболочка sprintstatf), использует системный вызов
ОТВЕТЫ
Ответ 1
(добавлена в С++ 17) делает это очень просто.
Как отмечено в комментариях, если вы планируете использовать эту функцию, чтобы решить, сколько байтов нужно прочитать из файла, имейте в виду, что.
. если файл не открыт исключительно вами, его размер можно изменять между временем, когда вы запрашиваете его, и временем, когда вы пытаетесь прочитать данные из него. — Николь Болас
Ответ 2
С++ 17 предоставляет std::filesystem которая оптимизирует множество задач для файлов и каталогов. Вы можете не только быстро получить размер файла, его атрибуты, но и создавать новые каталоги, перебирать файлы, работать с объектами пути.
Новая библиотека дает нам две функции, которые мы можем использовать:
Каждый метод также имеет перегрузку, так как он может генерировать исключение или возвращать код ошибки (через выходной параметр). Ниже приведен подробный код, объясняющий все возможные случаи.
Ответ 3
Обратная совместимость со старыми операционными системами
Ваш вопрос предполагает, что в операционной системе установлены новейшие библиотеки C++. Это может быть не так.
В промышленном контексте нет ничего необычного в том, чтобы найти машины, которые работают изолированно от Интернета. Возможно, они либо не были обновлены, потому что обновление сложно сделать, либо им может быть запрещено обновляться, потому что ОС и связанные программы на ПК были проверены, и изменения потребуют повторной проверки. В любом случае, ПК не получает своих обновлений, и он вполне может застрять с библиотеками времени выполнения до C++ 17. Если ваше приложение предполагает, что библиотека времени выполнения существует и поддерживает это, оно может не запуститься.
Или в качестве другой альтернативы, вы можете по какой-либо причине использовать старую ОС, которая больше не поддерживается. Возможно, люди, работающие с этой вилкой Linux, разорились или просто прекратили ее обслуживать. Или, возможно, ОС устарела, и было принято сознательное решение не выпускать дальнейшие обновления. Какова бы ни была причина, если она стала не обслуживаемой до того, как C++ 17 библиотек времени выполнения стали широко доступными, снова возможно, что ваше приложение может не работать.
Очевидный путь к этому заключается в том, чтобы заранее указать, на каких платформах должно работать ваше приложение, и указать, что все обновления должны применяться. Если это Windows, что-либо до Windows 7, конечно, не рекомендуется, и для этого потребуются все обновления, чтобы использовать последние библиотеки времени выполнения. Если это Linux, посмотрите, где libstd C++ берет C++ 17. Также, если вы строите на этой платформе Linux вместо кросс-компиляции, посмотрите, где g++ становится полностью C++ 17-совместимым для платформы, потому что вам это тоже нужно.
Если вы работаете на другой ОС, такой как VxWorks, Tornado или FreeRTOS, вам снова придется искать все это для вашей ОС. Обычно встроенные ОС и связанные с ними библиотеки имеют тенденцию отставать от соответствия стандартам, потому что проверка для ОСРВ, как правило, более строгая.
Эта таблица перекрестных ссылок может быть полезна для определения версии поддерживаемого компилятора C++ 17.
Если вы хотите, чтобы fsize() печатал сообщение об ошибке, вы можете использовать это:
Ответ 2
IIRC стандартная библиотека определяет off_t как неподписанное 64-битное целое число, которое все должны использовать. Мы можем переопределить это до 128 бит за несколько лет, когда мы начнем работать с 16 файлами exabyte.
Ответ 3
Решение Matt должно работать, за исключением того, что это С++ вместо C, и исходный запрос не нужен.
Исправлена ваша скобка для вас.;)
Ответ 4
Цитата стандартного документа C99, который я нашел в Интернете: «Установка индикатора положения файла в конец файла, как и в файле fseek (файл, 0, SEEK_END), имеет поведение undefined для бинарного потока (из-за возможного завершающие нулевые символы) или для любого потока с зависящей от состояния кодировкой, которая не обязательно заканчивается в исходном состоянии сдвига. **
Измените определение на int, чтобы сообщения об ошибках могли быть переданы, а затем используйте fseek() и ftell() для определения размера файла.
Ответ 5
Если вам хорошо с помощью библиотеки std c:
Ответ 6
POSIX
Стандарт POSIX имеет свой собственный метод для получения размера файла. Включите заголовок sys/stat.h для использования функции.
конспект
Примеры
ANSI C (стандарт)
ANSI C не предоставляет прямой способ определения длины файла. Нам придется использовать наш разум. Сейчас мы будем использовать подход поиска!
конспект
пример
Мнение: Вы должны вместо этого использовать стандарт POSIX. Потому что он имеет поддержку 64 бит.
Ответ 7
И если вы создаете приложение Windows, используйте API GetFileSizeEx, поскольку ввод/вывод файлов CRT бесполезен, особенно для определения файла длина из-за особенностей файловых представлений в разных системах;)
Ответ 8
Быстрый поиск в Google нашел метод, использующий fseek и ftell, и поток с этим вопросом с ответами, что это невозможно сделать в просто C по-другому.
Вы можете использовать библиотеку переносимости, например NSPR (библиотека, которая активирует Firefox) или проверьте его реализация (довольно волосатая).
Ответ 9
Я использовал этот набор кода для поиска длины файла.
Ответ 10
Что это значит, прежде всего, ищите конец файла; затем сообщите, где находится указатель файла. Наконец (это необязательно) он перематывается обратно в начало файла. Обратите внимание, что fp должен быть двоичным потоком.
file_size содержит количество байтов, содержащихся в файле. Обратите внимание, что поскольку (согласно climits.h) беззнаковый длинный тип ограничен 4294967295 байтами (4 гигабайта), вам нужно будет найти другой тип переменной, если вы, вероятно, будете иметь дело с файлами, большими, чем это.
Ответ 11
Здесь простая и понятная функция, которая возвращает размер файла.
Ответ 12
32- битный метод может рассчитывать до 4GB размера файла, также как ограничение размера файла Fat32. Примечание: если ввод stdin /pipe, метод не будет работать.
Ответ 13
Ответ 14
Вам понадобится использовать библиотечную функцию для получения сведений о файле. Поскольку C полностью независима от платформы, вам нужно сообщить нам, какую платформу/операционную систему вы разрабатываете!
Ответ 15
Рассматривая вопрос, ftell может легко получить количество байтов.
Ответ 16
Вы можете открыть файл, перейти к 0 смещению относительно нижней части файла с помощью
Я долгое время не записывал код на C, но я думаю, что он должен работать.
если вы хотите fsize() для печати сообщения об ошибке можно использовать это:
IIRC стандартная библиотека определяет off_t Как 64-битное целое число без знака, которое все должны использовать. Мы можем переопределить это, чтобы быть 128 бит, через несколько лет, когда мы начали заниматься 16 эксабайт, файлы шляется.
решение Мэтта должно работать, за исключением того, что это C++ вместо C, и начальное сообщение не должно быть необходимым.
исправлена скобка для вас тоже. 😉
цитирование стандартного документа C99, который я нашел в интернете: «установка индикатора положения файла в конец файла, как и в fseek (file, 0, SEEK_END), имеет неопределенное поведение для двоичного потока (из-за возможных конечных нулевых символов) или для любого потока с зависимой от состояния кодировкой, которая не обязательно заканчивается в начальном состоянии сдвига.**
измените определение на int, чтобы сообщения об ошибках могли быть передано, а затем используйте fseek () и ftell () для определения размера файла.
Если вы в порядке с использованием библиотеки std c:
и если вы создаете приложение для Windows, используйте GetFileSizeEx API как CRT файл ввода / вывода является грязным, особенно для определения длины файла, из-за особенностей в представлениях файлов на разных системах 😉
быстрый поиск в Google нашел метод с использованием fseek и ftell и поток с этим вопросом с ответами, что это не может быть сделано только в C по-другому.
вы можете использовать библиотеку переносимости, такую как NSPR (библиотека, которая запускает Firefox) или проверьте его реализации (довольно волосатые).