Как найти размер файла в байтах

  1. Определение
  2. Единица измерения
  3. Как определить размер файла?
  4. Как определить размер группы файлов?
  5. Ограничения в размере файла при передаче
  6. Как уменьшить размер файла?

Во время работы на компьютере часто появляется необходимость узнать размер файла. Это позволяет рассчитать, поместится ли он на цифровом носителе, при переносе или увидеть, сколько памяти занимает папка в памяти ПК. Рассмотрим подробно данное понятие и способ пошагово вывести информацию о размере на экран, различные манипуляции, которые могут пригодиться во время работы.

Определение

Размером файла называется объем пространства, которое он занимает на жестком диске, портативном носителе или в облачном хранилище. Этот показатель напрямую зависит от количества информации, содержащейся в файле.

Единица измерения

Размер файла измеряется в байтах (Б или b), и это является самым маленьким количеством данных. Обычно папка или иной вид информации (изображение, песня, электронная книга) имеет выражение веса в килобайтах (КБ или kb). Один килобайт эквивалентен 1024 байтам.

Более крупными единицами измерения являются мегабайты (МБ или mb) и гигабайты (ГБ или gb), равные 1024 килобайтам и 1024 мегабайтам соответственно. Из используемых в повседневной работе с ПК, наибольшей единицей выражения веса файла является терабайт (ТБ или tb), который эквивалентен 1024 гигабайтам.

В этих же единицах измерения определяется все пространство памяти на ПК, различных гаджетах и портативных носителях (флеш-карта, внешний жесткий диск и т.д.). И предельное количество файлов, которое можно загрузить в устройство, зависит от количества свободного пространства.

Как определить размер файла?

1. Наведите курсор мыши на файл и щелкните по нему правой кнопкой.

Вызов контекстного меню

2. В появившемся контекстном меню выберите пункт “свойства” и щелкните на него.

3. Нужные данные можно увидеть в поле “размер”.

Просмотр свойств файла

Как определить размер группы файлов?

Если требуется определить суммарный размер нескольких файлов, нужно поступить так:

1. Выделите элементы, вес которых нужно определить. Это можно сделать, щелкнув по файлу левой кнопкой мыши и растянув появившуюся рамку на все папки. При этом следует удерживать кнопку мышки. Также можно выделить элементы, кликнув по одному из них, а затем, нажав клавишу Ctrl, щелкнуть поочередно по всем остальным.

Выделение группы файлов

2. Поставить курсор на один из выделенных элементов и кликнуть по нему правой кнопке мыши.

Вызов контекстного меню над группой файлов

3. В появившемся контекстном меню выберите пункт “Свойства” и кликните по нему.

Просмотр свойств группы файлов

4. В пункте “размер” будет обобщённая информация о размере всех выбранных элементов.

Для поиска файлов большого размера с целью последующего удаления ненужных данных можно воспользоваться известной утилитой CCleaner. Кроме очистки ПК, она может отображать размер элементов. Для этого нужно выбрать пункт “Сервис” – “Анализ дисков”. Впоследствии будет приведена диаграмма занимаемой памяти с подробной таблицей размера файлов различных типов.

Ограничения в размере файла при передаче

Загружая файлы или передавая их с одного носителя на другой, пользователь иногда встречается с ограничениями. Они могут быть связаны с тем, что:

  • Наблюдается недостаток места в памяти;
  • Требуется закачать файл на веб-ресурс (файлообменник или, к примеру, сайт по поиску работы), который выставил ограничения;
  • Проводится оптимизация сайта для убыстрения загрузки у пользователей с низкой скоростью передачи данных.

Как уменьшить размер файла?

Если по каким-то причинам нужно уменьшить вес файла, это можно сделать путем нехитрых манипуляций. Для каждого типа есть свой способ сжать элемент.

Документ. Если нужно быстро прикрепить или передать документ, то будет целесообразно снизить его вес. Для этого можно:

  • Сохранить в формате docx, по сравнению с doc, он занимает меньше места. Разница ощутимая. Чтобы сделать это, следует открыть документ, выбрать пункт меню “Файл”, затем “Преобразовать”;
  • Корректно работать с картинками. А значит, не просто их копировать в текстовый документ, а вставлять через пункт “Вставить рисунок”. Чтобы существенно уменьшить размер, следует вкладывать отредактированные картинки с меньшим весом. Также можно при сохранении воспользоваться кнопкой “Сервис” и задать единый размер для всех картинок в документе посредством пункта меню “Сжать рисунки”;
  • Много места могут занимать и шрифты, которые не установлены в ПК. Чтобы избавиться от них, следует убрать галочку в пункте меню “внедрить шрифты в файл” (путь “Файл” -> “Параметры” -> “Сохранение”).

PDF. Файл PDF является универсальным, так как определяется большинством ОС. Они безопасны, и зачастую в этом формате сохраняют сканированные документы. Но их пересылка может быть затруднительна из-за их немалого размера.

Их можно сделать чуть легче с помощью Adobe Acrobat Reader, для этого достаточно кликнуть на “Уменьшить размер файла”. Для пересылки подойдет и архивация. Чтобы ощутимо уменьшить вес, можно воспользоваться онлайн-сервисами, например, Smallpdf — ресурс для автоматического сжатия файла PDF. Сайт удобен тем, что не требует никаких дополнительных манипуляций, достаточно загрузить элемент, а затем уже скачать уменьшенный аналог. Также им можно сразу же поделиться по электронной почте, загрузить в облако. Весь процесс занимает минимум времени.

Сжать PDF

PDF Creator — бесплатная утилита, способная легко конвертировать документы в данный формат, а также уменьшить размер готового файла. Чтобы сделать легче документ PDF, следует открыть его в программе, а затем нажать на “Печать” – “Свойства” – “Бумага/качество” – “Дополнительно”. Здесь нужно задать для DPI более низкое значение, это уменьшит разрешение и, как следствие, размер.

Папка. Наиболее распространенный способ уменьшить размер папки с файлами — архивация. Она позволяет уменьшить вес, не теряя качества содержимого. Хороший способ хранения и передачи различных элементов.

Есть специальные программы для упаковки файлов и папок большого размера. Наиболее известные для Windows — 7-Zip (бесплатный архиватор) и WinRAR (платная программа с хорошей производительностью). Чтобы архивировать файлы на ПК с установленной утилитой достаточно кликнуть на объект правой кнопкой мыши и перейти в пункт “Добавить в архив” и выбрать логотип программы.

Этот способ экономии памяти не несет за собой потери качества изображений и иных файлов, а также позволит записать их на портативный носитель или передать через электронную почту. Чтобы получателю распаковать архив, нужно будет использовать ту же утилиту.

Фотографии. Фото и иные изображения могут иметь действительно большой размер. Для уменьшения подобных файлов формата JPG (одного из наиболее распространенных), чаще всего, используется сжатие. Сделать это можно с помощью утилит:

  • Paint и Paint.NET— стандартная программа коррекции изображения. С ее помощью можно сделать меньше разрешение, что в разы снизит вес. Для этого следует выбрать пункт меню “Изменить размер”, кликнув мышкой. В появившемся окне задается более низкое значение одного из параметров. Это влечет за собой автоматическое изменение остальных параметров, в соответствии с пропорциями фото;
  • Photoshop — редактор цифровых изображений для профессионалов. Здесь, для уменьшения веса фото, с сопутствующим снижением качества следует выбрать пункт меню File, затем Save for Web. Далее откроется окошко, в котором будет представлено исходное изображение и сохраненное для веб, под каждым пишет вес.

Еще один вариант — уменьшить значения ширины или высоты в пикселях или в процентах. При этом нужно следить за соотношением значений сторон, пропорцией. Сжатое изображение теряет качество и его уже не вернуть, поэтому следует сохранять и исходную картинку.

Аудио. Формат аудиофайлов .mp3, .aac означает, что файл уже сжат. Дальнейшие манипуляции приведут к потере качества. Звуковые файлы формата .wav, .aiff можно немного отредактировать, чтобы уменьшить размер.

Для этого их можно сохранить в виде .mp3 или .flac файла, попутно следует задать меньший битрейт. Это повлечет некоторую потерю качества. К примеру, 128 Кбит/сек. — звук FM-радио, 320 Кбит/сек. — звучание диска CD. Чтобы внести подобные изменения, потребуется утилита, подойдет любой бесплатный аудиоредактор.

Видео. Касательно видеофайла ситуация аналогична: сжатие несет потерю качества, для редактирования с целью уменьшения объема занимаемой памяти потребуется видеоредактор. Подойдет и самый простой, бесплатный.

С помощью утилиты можно обрезать видео, убрать лишнее и, заодно, снизить вес. Это делается просто — отмечается участок или несколько, которые можно убрать, и вырезается. Еще один способ — конвертировать видео в более компактный формат, выбрать нужный кодек и контейнер. Наиболее экономным будет MP4 (DiVX, MPEG2 тоже могут стать оптимальным решением). Также можно повлиять на качество и разрешение видео, задать битрейт. Некоторые программы позволяют установить и вес конечного файла. Если параметры не менять кардинально, то потеря качества не будет столь ощутима, но место, занимаемое на жестком диске уменьшится.

Таким образом, узнать вес файла и уменьшить его размер достаточно просто.  Следует в соответствии с типом элемента произвести ряд соответствующих манипуляции. Это позволит легко обмениваться данными и экономить место на жестком диске, съемном носителе или в сети Интернет.

Вопрос о том, как грамотно определить размер файла, может встать перед каждым пользователем. Для этого не обязательно быть программистом или системным администратором. Определение размеров документации в электронном виде – базовая операция. С ней должен познакомиться каждый ПК-пользователь.

В данной статье будет рассказано о том, как определять «габариты» файла. Предстоит разобраться не только в азах соответствующего процесса, но и в действующих единицах измерения.

Размер документа – это…

Размер файла – объем пространства, которое занимает соответствующая электронная документация на устройстве. А именно – в его памяти.

Зависит размер файла или папки от количества информации, которая находится внутри. Узнать подобные данные удается несколькими методами. Каждый пользователь ПК может выбрать оптимальное для себя решение.

Единицы измерения

Можно выразить размеры файла в байтах. Это – классическая единица измерения. Она является наименьшей единицей электронных сведений.

Основная масса материалов на компьютере измеряется в килобайтах, а не в байтах. Узнать объем документа, файла или папки предлагается при помощи МБ (мегабайтов) и ГБ (гигабайты). Современные компьютеры также работают с ТБ (терабайтами).

Здесь рекомендуется запомнить следующее:

  • 1 байт – 8 бит;
  • единица в килобайтах – это 1024 в байтах;
  • 1 Мб – 1024 Кб;
  • 1 ГБ – 1024 Мб;
  • 1 ТБ – 1024 ГБ.

Эти же единицы измерения применяются для обозначения имеющегося пространства на устройстве. Не только занятого, но и свободного.

Варианты определения

Посмотреть (узнать) объем занятого электронными материалами сведения можно различными способами. Далее будут рассмотрены такие приемы:

  • как узнать объем единственного файлика;
  • работа с группами документов;
  • сколько места занимает папка;
  • объем носителя информации.

Также предстоит выяснить, какие ограничения действуют при передаче электронных материалов и изучить методы уменьшения «габаритов» файликов.

Единственный документ

Сначала стоит выяснить, как узнать размер заданного файла. Это – элементарная операция. Определяется объем системой автоматически.

Чтобы справиться с задачей, нужно:

  1. Перейти на устройстве к файлу, с которым планируется дальнейшая работа.
  2. Выделить его. Для этого – кликнуть ЛКМ по характерной иконке.
  3. Нажать ПКМ. Откроется большое меню.
  4. Переключиться в раздел «Свойства».
  5. Во вкладке «Общее» посмотреть интересующую информацию. Она будет выражена в байтах и килобайтах. Если документация объемная – мегабайтах и гигабайтах.

Определить занятый объем на устройстве можно иначе. Для этого достаточно выделить документацию и навести на нее курсор. Немного подождать. На экране появится одно маленькое всплывающее окно – там прописываются основные сведения об интересующем компоненте в операционной системе.

Работа с папками

С тем, как определить размер файла, разобраться удалось. Остаются другие вопросы – это работа с папками и группами электронных материалов.

Чтобы определить объем занимаемого архивом данных пространства, действовать предстоит точно так же, как и в случае и одиночным файлом. Проверить достоверность можно, поместим в «портфель» очередной документ. Объем архива увеличится на соответствующее значение.

Группы

Работа с файлами и папками – базовые навыки, которыми должен обладать каждый пользователь. Можно с легкостью выяснить, какой размер имеют несколько документов. Чтобы добиться соответствующего результата, предстоит:

  1. Выделить группу файлов или папок. Можно – все вместе. Главное, чтобы под выделение попадали элементы, которые планируется оценить. Сделать это удается при помощи курсора и зажатой клавиши Ctrl на клавиатуре. Альтернативное решение – «обрисовка» границ выделения на экране ЛКМ.
  2. При выделенных компонентах щелкнуть ПКМ и перейти в «Свойства».
  3. Посмотреть в разделе «Общие» интересующие сведения.

Также можно после выделения группы элементов на устройстве навести курсор на «обозначенную» область и немного подождать. Информация появится в небольшом всплывающем окне.

Пространство на носителе

Операция, с которой тоже должен познакомиться каждый пользователь. Все носители информации имеют определенное количество свободного/занятого места. Чтобы посмотреть подобные данные, необходимо:

  1. Вставить носитель информации в компьютер.
  2. Перейти в «Мой Компьютер». Здесь уже часто отображаются интересующие сведения. Если нет – стоит перейти к следующему шагу.
  3. Выделить интересующий носитель данных курсором мыши и нажать ПКМ.
  4. Перейти в «Свойства».

Возникнет диалоговое окно, в котором находится соответствующая информация. Здесь «Емкость» — это общий размер носителя, «Занято» — общий размер файлов и папок, приложений на устройстве, «Свободно» — оставшееся пространство.

Ограничения при передаче

Иногда при переносе информации приходится сталкиваться с ограничениями по объему. Это может быть связано с:

  • недостатком памяти;
  • ограничениями системы (пример – файлообменник, не позволяющий загружать слишком больше файлы);
  • оптимизацией веб-сервиса.

На компьютерах обычно нет ограничений по размеру документов. Достаточно лишь запомнить, что объемные файлы обрабатываются медленнее.

Способы уменьшения объема

Как узнать размер файла, понятно. Иногда возникает необходимость в уменьшении занимаемого пространства соответствующим документом. Добиться такого результата можно – с потерей качества и без него.

Чтобы «сжать» элементы в операционной системе предлагается использовать:

  1. Архивирование. Пример – перевод в zip и rar.
  2. Переходы к «старым форматам». Так docx занимает больше места, чем doc.
  3. Грамотное использование графических документов. Их предварительно сжимают перед вставкой в файл или выкладыванием на сайт.
  4. Перевод в другой формат. Данный процесс называется конвертированием. Часто приводит к потере качества.

Если речь идет о хранении видео, стоит отдать предпочтение MP4, а для аудио – MP3.

Хотите освоить современную IT-специальность? Огромный выбор курсов по востребованным IT-направлениям есть в Otus!

Время чтения 2 мин.

Python stat() — это встроенный модуль OS, который имеет два метода, которые возвращают размер файла. Модуль OS в Python предоставляет функции для взаимодействия с операционной системой. Он входит в стандартные служебные модули Python. Модуль os обеспечивает портативный подход к использованию функций, зависящих от операционной системы.

Содержание

  1. Получение размера файла в Python 
  2. Python os.path.getsize()
  3. Python os.stat()
  4. Python path.stat().st_mode

Чтобы получить размер файла в Python, мы можем использовать один из следующих трех способов:

  1. Python os.path.getsize()
  2. Python os.stat()
  3.  Python path.stat().st_mode.

Как получить размер файла в Python

Python os.path.getsize()

Функция os.path.getsize() возвращает размер в байтах. Вызовет OSError, если файл не существует или недоступен.

См. следующий код.

import os

file_name = “npfile.txt”

file_size = os.path.getsize(file_name)

print(f‘File Size in Bytes is {file_size}’)

print(f‘File Size in MegaBytes is {file_size /(1024 * 1024)}’)

Выход:

File Size in Bytes is 42

File Size in MegaBytes is 4.00543212890625e05

Сначала мы определили файл, а затем получили его размер с помощью функции os.path.getsize(), которая возвращает размер файла в байтах, а затем в последней строке мы преобразовали размер в байтах в размер в МБ.

Python os.stat()

Метод os.stat() в Python выполняет системный вызов stat() по указанному пути. Метод stat() используется для получения статуса указанного пути. Затем мы можем получить его атрибут st_size, чтобы получить размер файла в байтах. Метод stat() принимает в качестве аргумента имя файла и возвращает кортеж, содержащий информацию о файле.

import os

file_name = “npfile.txt”

file_stats = os.stat(file_name)

print(file_stats)

print(f‘File Size in Bytes is {file_stats.st_size}’)

print(f‘File Size in MegaBytes is {file_stats.st_size /(1024 * 1024)}’)

Выход:

os.stat_result(st_mode=33188, st_ino=75203319, st_dev=16777220,

st_nlink=1, st_uid=501, st_gid=20, st_size=42,

st_atime=1589517754, st_mtime=1589517753,

st_ctime=1589517753)

File Size in Bytes is 42

File Size in MegaBytes is 4.00543212890625e05

Из вывода вы можете видеть, что мы получили кортеж, полный информации о файле. Затем мы получили доступ к определенному свойству, называемому st_size, чтобы получить размер файла, а затем преобразовать размер в МБ или мегабайты.

Если вы внимательно посмотрите на метод stat(), мы можем передать еще два параметра: dir_fd и follow_symlinks. Однако они не реализованы для macOS.

Python path.stat().st_mode

Функция Python path.stat() возвращает объект os.stat_result, содержащий информацию об этом пути, подобно os.stat(). Результат просматривается при каждом вызове этого метода.

См. следующий код.

from pathlib import Path

file_name = “npfile.txt”

file_size = Path(file_name).stat().st_size

print(f‘File Size in Bytes is {file_size}’)

print(f‘File Size in MegaBytes is {file_size /(1024 * 1024)}’)

Выход:

File Size in Bytes is 42

File Size in MegaBytes is 4.00543212890625e05

Мы импортировали модуль pathlib и использовали Path.state().st_size для получения размера файла.

Итак, мы рассмотрели 3 метода, как узнать размер файла в Python.

Как оказалось, узнать размер файла в языке C – совсем нетривиальная задача. В процессе её решения как минимум вы обязательно столкнетесь с переполнением целочисленного типа данных. В данной статье я приведу 4 способа получения размера файла с использованием функций из стандартной библиотеки C, функций из библиотеки POSIX и функций из библиотек Windows.
Способ 1: решение “в лоб” (скомпилируется везде, но работает очень долго)
Мы просто откроем файл в бинарном режиме и в цикле считаем из него байт за байтом.

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

#include <stdio.h>

#include <stdlib.h>

#include <stdint.h> // для int64_t

#include <inttypes.h> // для правильного вывода int64_t в printf

int64_t getFileSize(const char* file_name){

int64_t _file_size = 0;

FILE* fd = fopen(file_name, “rb”);

if(fd == NULL){

_file_size = 1;

}

else{

while(getc(fd) != EOF)

_file_size++;

fclose(fd);

}

return _file_size;

}

#define FILE_PATH “some_file.txt”

int main(){

int64_t file_size = getFileSize(FILE_PATH);

printf(“File size: %” PRId64 “n”, file_size);

return 0;

}

Очевидным недостатком способа является скорость работы. Если у нас файл будет на много гигабайт, то только размер файла будет считаться относительно долго (это сколько байт то надо считать?), а надо же еще остальную программу выполнять.
Достоинство такого способа – работать должен на любой платформе. Ну и конечно можно ускорить процесс за счет считывания бОльшего количества байт.

Способ 2: с использованием функций fseek и ftell (ограничен для объемных файлов и работает не всегда верно)

Данный способ основан на использовании функций стандартной библиотеки C: fseek и ftell. Что происходит – открываем файл в бинарном режиме, перемещаем внутренний указатель положения в файле сразу в конец с помощью fseek, получаем номер последнего байта с помощью ftell.

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

#include <stdio.h>

#include <stdlib.h>

#include <stdint.h> // для int64_t

#include <inttypes.h> // для правильного вывода int64_t в printf

int64_t getFileSize(const char* file_name){

int64_t _file_size = 0;

FILE* fd = fopen(file_name, “rb”);

if(fd == NULL){

_file_size = 1;

}

else{

fseek(fd, 0, SEEK_END);

_file_size = ftello(fd);

fclose(fd);

}

return _file_size;

}

#define FILE_PATH “some_file.txt”

int main(){

int64_t file_size = getFileSize(FILE_PATH);

printf(“File size: %” PRId64 “n”, file_size);

return 0;

}

Проблем у данного способа несколько.
Первое – это возвращаемый тип функции ftell. У разных компиляторов на разных платформах по разному. Если у вас 32х битная система, то данный способ будет работать только для файлов, размером меньше 2048 Мб, поскольку максимальное значение для возвращаемого функцией типа long там будет 2147483647. На системах с большей разрядностью будет работать лучше, из-за большего значения максимума для long. Но подобная нестабильность будет мешать. Хотя у меня на 64х битой системе на компиляторе gcc данный способ для файлов больше 8 Гб выводил некорректные значения.
Второе – гарантированность работы fseek и ftell. Коротко говоря, на разных платформах работает по-разному. Где то будет точно возвращать значение положения последнего байта, где то будет возвращать неверное значение. То есть точность данного способа негарантированна.

Плюсом является то, что эти функции из стандартной библиотеки – скомпилируется почти везде.

Стоит сказать, что хитрые инженеры из Microsoft придумали функции _fseeki64 и _ftelli64, которые, как понятно из их названия, работают с int64, что решает проблему с размером файла в MSVC под Windows.

Способ 3: (под Linux (POSIX))

Данный способ основан на использовании системном вызове fstat с использованием специальной структуры struct stat. Как работает: открываем файл через open() или fopen(), вызываем fstat для дескриптора файла (если открыли через fopen, то в fstat надо положить результат fileno от указателя потока FILE), указав на буферную структуру для результатов, и получаем значения поля буферной структуры st_size.

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

#include <stdio.h>

#include <stdlib.h>

#include <stdint.h> // для int64_t

#include <inttypes.h> // для правильного вывода int64_t в printf

#ifdef __linux__

#include <sys/types.h>

#include <sys/stat.h>

#include <fcntl.h>

#include <unistd.h>

#endif

int64_t getFileSize(const char* file_name){

int64_t _file_size = 0;

struct stat _fileStatbuff;

int fd = open(file_name, O_RDONLY);

if(fd == 1){

_file_size = 1;

}

else{

if ((fstat(fd, &_fileStatbuff) != 0) || (!S_ISREG(_fileStatbuff.st_mode))) {

_file_size = 1;

}

else{

_file_size = _fileStatbuff.st_size;

}

close(fd);

}

return _file_size;

}

#define FILE_PATH “some_file.txt”

int main(){

int64_t file_size = getFileSize(FILE_PATH);

printf(“File size: %” PRId64 “n”, file_size);

return 0;

}

Гарантированно работает под Linux. Тип поля st_size будет как знаковый int64. Под Windows с использованием Mingw также можно использовать такой способ (с fopen и fileno), но я точно не знаю как там обстоят дела с типом поля структуры st_size.

Способ 4: (под Windows (начиная с Windows XP)):

Еще один способ конкретно под системы Windows с помощью функции GetFileSizeEx, которая доступна в системах, начиная с Windows XP. Для систем постарее используйте GetFileSize (но там снова проблема с максимальным размером файла из-за типа данных).

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

#include <stdio.h>

#include <stdlib.h>

#include <stdint.h> // для int64_t

#include <inttypes.h> // для правильного вывода int64_t в printf

#ifdef _WIN32

// без этих двух строк не скомпилируется

// при использовании функции GetFileSizeEx()

#define WINVER 0x0501

#define _WIN32_WINNT WINVER

#include <windows.h>

#include <sysstat.h>

#endif

int64_t getFileSize(const char* file_name){

int64_t _file_size = 0;

HANDLE hFile;

hFile = CreateFile(TEXT(file_name), GENERIC_READ, 0, NULL, OPEN_EXISTING,

FILE_ATTRIBUTE_NORMAL | FILE_FLAG_OVERLAPPED, NULL);

if(hFile == INVALID_HANDLE_VALUE){

_file_size = 1;

}

else{

LARGE_INTEGER u_winFsz;

GetFileSizeEx(hFile, &u_winFsz);

CloseHandle(hFile);

_file_size = u_winFsz.QuadPart;

}

return _file_size;

}

#define FILE_PATH “some_file.txt”

int main(){

int64_t file_size = getFileSize(FILE_PATH);

printf(“File size: %” PRId64 “n”, file_size);

return 0;

}

GetFileSizeEx гарантированно работает под Windows. Не работает больше нигде. Тип под размер файла: LONGLONG, который равен размеру знаковому int64. То есть узнаем размер для файлов с максимум 9223372036854775807 байт (до 8589934592 Гб).

Выводы: лучше использовать платформозависимые способы, которые под конкретную систему выдаст гарантированный корректный результат, а не изобретать велосипеды.

Свои варианты оставляйте в комментариях, будет интересно посмотреть!

В этом посте будет обсуждаться, как найти размер файла в байтах в C.

Стандарт C не предоставляет никакого прямого метода для определения размера файла. Однако мы можем использовать любой из следующих методов, чтобы получить размер файла:

1. Использование stat() функция

В Unix-подобных системах мы можем использовать системные вызовы, совместимые с POSIX. stat() Функция принимает путь к файлу и возвращает структуру, содержащую информацию о файле, на который он указывает. Чтобы получить размер файла в байтах, используйте st_size поле возвращаемой структуры.

#include <iostream>

#include <sys/stat.h>

int main()

{

    char filename[] = “somefile.txt”;

    struct stat st;

    stat(filename, &st);

    off_t size = st.st_size;

    std::cout << “The file size id “ << size << ” bytesn”;

    return 0;

}

2. Использование fstat() функция

Если у нас уже есть файловый дескриптор, используйте fstat() функция. fstat() функция идентична stat() функция, за исключением того, что файл определяется дескриптором файла.

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

#include <iostream>

#include <sys/stat.h>

int main()

{

    char filename[] = “somefile.txt”;

    FILE *fp = fopen(filename, “r”);

    if (fp == NULL)

    {

        printf(“Cannot open source file.n”);

        exit(1);

    }

    struct stat st;

    int fd = fileno(fp);    // получаем дескриптор файла

    fstat(fd, &st);

    off_t size = st.st_size;

    std::cout << “The file size id “ << size << ” bytesn”;

    return 0;

}

3. Использование fseek() функция

Идея состоит в том, чтобы искать файл до конца, используя fseek() функция с SEEK_END смещения, а затем получить текущую позицию с помощью ftell() функция. Возвращаемое значение ftell() это размер файла в байтах.

Этот подход демонстрируется ниже. Обратите внимание, что после получения размера файла мы вызываем метод rewind() функция для поиска файла в начале файла. rewind() функция эквивалентна вызову fseek(stream, 0L, SEEK_SET).

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

#include <iostream>

int main()

{

    char filename[] = “somefile.txt”;

    FILE *fp = fopen(filename, “r”);

    if (fp == NULL)

    {

        printf(“Cannot open source file.n”);

        exit(1);

    }

    fseek(fp, 0L, SEEK_END);    // ищем EOF

    int size = ftell(fp);       // получаем текущую позицию

    rewind(fp);                  // перематываем в начало файла

    std::cout << “The file size id “ << size << ” bytesn”;

    return 0;

}

Вот и все, что касается нахождения размера файла в байтах в C.

Добавить комментарий