Как найти размер полученного файла

  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 тоже могут стать оптимальным решением). Также можно повлиять на качество и разрешение видео, задать битрейт. Некоторые программы позволяют установить и вес конечного файла. Если параметры не менять кардинально, то потеря качества не будет столь ощутима, но место, занимаемое на жестком диске уменьшится.

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

Как оказалось, узнать размер файла в языке 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 Гб).

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

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

Время чтения 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.

Стандарт 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.

13 января 2020

Александр Кичатов

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

Размер файла можно получить с помощью функции filesize(). Результатом будет число в байтах:

<?php
    $size = filesize('file.txt');
    echo "Размер файла в байтах: $size<br>";
    echo 'Размер файла в мегабайтах: ' . round($size / 1024 / 1024, 2);

Дата создания и изменения файла

Функция filemtime() возвращает время последнего изменения файла в виде временной метки UNIX:

<?php
    $unix_time = filemtime('file.txt');

    echo date('d.m.Y', $unix_time); // вывод даты в формате ДД.ММ.ГГГГ
    echo date('d.m.Y H:i:s', $unix_time); // вывод даты и времени в формате ДД.ММ.ГГГГ ЧЧ:ММ:СС

К сожалению, в UNIX нет понятия даты создания файла, поэтому вам придётся где-то хранить её самостоятельно, например в базе данных или в названии файла.

Для Windows можно воспользоваться функцией filectime():

<?php
    $unix_time = filectime('file.txt');
    echo date('d.m.Y', $unix_time);

Папка, название и расширение файла

Функция pathinfo() позволяет из пути к файлу получить его папку, название и расширение:

<?php
    $info = pathinfo('D:OpenServerdomainsprogramulin.ruscript.php');
    print_r($info);

Результат в браузере:

Array
(
    [dirname] => D:OpenServerdomainsprogramulin.ru
    [basename] => script.php
    [extension] => php
    [filename] => script
)

Если нужен только один из параметров, можно сразу получить его с помощью встроенных констант PATHINFO_DIRNAME, PATHINFO_BASENAME, PATHINFO_EXTENSION и PATHINFO_FILENAME, например:

<?php
    echo pathinfo('D:OpenServerdomainsprogramulin.ruscript.php', PATHINFO_BASENAME);
    // script.php

Директория текущего скрипта

Магическая константа __DIR__ позволяет быстро получить абсолютный путь к папке текущего скрипта:

<?php
    echo __DIR__;

Комментарии

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