как узнать длину файла в си
Размер файла
Помощь в написании контрольных, курсовых и дипломных работ здесь.
Размер файла
Как узнать размер файла в Си? кроме функции GetFileSize
Чтение из файла слова (неправильный размер)
При чтении фрагмента в переменную я указываю и получается, что из строки Иванов Иван Иванович.
Чтение текстового файла без ограничения на размер
есть функция, которая осуществляет открытие и чтение текстового файла. функция возвращает.
Решение
Помощь в написании контрольных, курсовых и дипломных работ здесь.
Довести размер указанного файла до заданной длины
Программе задаются: имя существующего текстового файла; требуемая новая длина в байтах; символ.
Увеличить размер файла до 20, записав в начало нули
Дан файл целых чисел, содержащий менее 20 элементов. Увеличить его размер до 20 элементов, записав.
Как узнать размер массива при чтении из файла?
Доброго времени суток. Возник вопрос: как узнать размер массива при чтении из файла(имеется ввиду.
Записать в файл информацию о файлах,размер которых меньше размера последнего введенного файла
Записать в файл информацию о файлах,размер которых меньше размера последнего введенного файла.
Как определить размер файла в программе на C?
Нужно выделить память, равную размеру файла в байтах, под массив байтов и затем считать файл в этот массив.
3 ответа 3
Нужно использовать функцию fstat.
Или можно сделать fseek на конец файла. А затем ftell для получения текущего положения курсора в файле.
PS: при этом нужно быть аккуратным с файлами, размер которых превышает макс. значение для типа long. В этом случае можно воспользоваться 64-битными версиями ф-ций.
PPS: для того, чтобы ftell вернул именно размер файла, нужно его открыть в бинарном режиме.
C++ (w boost):
Возможно, не стоит париться, а посмотреть в сторону Memory Mapped Files (POSIX) и CreateFileMapping function (WIN)
Всё ещё ищете ответ? Посмотрите другие вопросы с метками c или задайте свой вопрос.
Похожие
Подписаться на ленту
Для подписки на ленту скопируйте и вставьте эту ссылку в вашу программу для чтения RSS.
дизайн сайта / логотип © 2021 Stack Exchange Inc; материалы пользователей предоставляются на условиях лицензии cc by-sa. rev 2021.9.10.40187
Нажимая «Принять все файлы cookie» вы соглашаетесь, что Stack Exchange может хранить файлы cookie на вашем устройстве и раскрывать информацию в соответствии с нашей Политикой в отношении файлов cookie.
Как определить размер файла в C?
Как я могу определить размер файла в байтах?
13 ответов
на основе кода NilObject:
если вы хотите 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) или проверьте его реализации (довольно волосатые).
Как определить размер файла в C?
Как я могу определить размер файла в байтах?
ОТВЕТЫ
Ответ 1
На основе кода NilObject:
Если вы хотите, чтобы 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, но я думаю, что он должен работать.
Работа с файлами
Для удобства обращения информация в запоминающих устройствах хранится в виде файлов.
Файл – именованная область внешней памяти, выделенная для хранения массива данных. Данные, содержащиеся в файлах, имеют самый разнообразный характер: программы на алгоритмическом или машинном языке; исходные данные для работы программ или результаты выполнения программ; произвольные тексты; графические изображения и т. п.
Файловой системой называется функциональная часть операционной системы, обеспечивающая выполнение операций над файлами. Примерами файловых систем являются FAT (FAT – File Allocation Table, таблица размещения файлов), NTFS, UDF (используется на компакт-дисках).
Существуют три основные версии FAT: FAT12, FAT16 и FAT32. Они отличаются разрядностью записей в дисковой структуре, т.е. количеством бит, отведённых для хранения номера кластера. FAT12 применяется в основном для дискет (до 4 кбайт), FAT16 – для дисков малого объёма, FAT32 – для FLASH-накопителей большой емкости (до 32 Гбайт).
Рассмотрим структуру файловой системы на примере FAT32.
Файловая структура FAT32
Устройства внешней памяти в системе FAT32 имеют не байтовую, а блочную адресацию. Запись информации в устройство внешней памяти осуществляется блоками или секторами.
Сектор – минимальная адресуемая единица хранения информации на внешних запоминающих устройствах. Как правило, размер сектора фиксирован и составляет 512 байт. Для увеличения адресного пространства устройств внешней памяти сектора объединяют в группы, называемые кластерами.
Кластер – объединение нескольких секторов, которое может рассматриваться как самостоятельная единица, обладающая определёнными свойствами. Основным свойством кластера является его размер, измеряемый в количестве секторов или количестве байт.
Файловая система FAT32 имеет следующую структуру.
Нумерация кластеров, используемых для записи файлов, ведется с 2. Как правило, кластер №2 используется корневым каталогом, а начиная с кластера №3 хранится массив данных. Сектора, используемые для хранения информации, представленной выше корневого каталога, в кластеры не объединяются.
Минимальный размер файла, занимаемый на диске, соответствует 1 кластеру.
Загрузочный сектор начинается следующей информацией:
Кроме того, загрузочный сектор содержит следующую важную информацию:
Сектор информации файловой системы содержит:
Таблица FAT содержит информацию о состоянии каждого кластера на диске. Младшие 2 байт таблицы FAT хранят F8 FF FF 0F FF FF FF FF (что соответствует состоянию кластеров 0 и 1, физически отсутствующих). Далее состояние каждого кластера содержит номер кластера, в котором продолжается текущий файл или следующую информацию:
Корневой каталог содержит набор 32-битных записей информации о каждом файле, содержащих следующую информацию:
Корневой каталог содержит набор 32-битных записей информации о каждом файле, содержащих следующую информацию:
В случае работы с длинными именами файлов (включая русские имена) кодировка имени файла производится в системе кодировки UTF-16. При этого для кодирования каждого символа отводится 2 байта. При этом имя файла записывается в виде следующей структуры:
Далее следует запись, включающая имя файла в формате 8.3 в обычном формате.
Работа с файлами в языке Си
Чтение символа из файла:
Запись символа в файл:
Функции fgets() и fputs() предназначены для ввода-вывода строк, они являются аналогами функций gets() и puts() для работы с файлами.
Результат выполнения — 2 файла
Работа с файлами в C++ описана здесь.