как узнать длину файла в си

Размер файла

Помощь в написании контрольных, курсовых и дипломных работ здесь.

Размер файла
Как узнать размер файла в Си? кроме функции 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 эксабайт, файлы шляется.

Читайте также:  как пинговать ipv6 адрес

решение Мэтта должно работать, за исключением того, что это 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 (используется на компакт-дисках).

Читайте также:  как узнать размер диска linux

Существуют три основные версии 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++ описана здесь.

Источник

Советы мастера