Как вычислить размер файла
Перейти к содержимому

Как вычислить размер файла

  • автор:

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

Узнать размер файла мы можем с помощью метода `length’ :

String fileName = "input.txt"; File file = new File(fileName); System.out.println(file.length() + " байт"); // => 17 байт 

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

В интернете есть несколько вариантов: просто перечитать весь файл (если файл большой, то не подходит из-за скорости), использовать tellg() (не подходит, так как ограничен на аппаратном уровне (не больше 8 гб)). Ни один из них мне не подходит. Есть ли какой-нибудь иной подход?

Отслеживать
задан 17 авг 2023 в 8:49
89 7 7 бронзовых знаков
«ограничен на аппаратном уровне» — такие сильные заявления следует как-то подкреплять
17 авг 2023 в 9:23

1 ответ 1

Сортировка: Сброс на вариант по умолчанию

См. функцию file_size из filesystem .

Однако не понимаю ваше неприятие tellg() . Отлично сработало на 140-гигабайтном файле. В чем вы видите проблемы?

int main(int argc, char * argv[])

выдает 150875752448, dir дает

05.08.2023 16:19 150 875 752 448 BELOFF_2O23.O4.ISO 

Отслеживать
ответ дан 17 авг 2023 в 8:55
220k 15 15 золотых знаков 120 120 серебряных знаков 233 233 бронзовых знака

  • c++
  • файлы
  • потоки-данных
  • fstream
    Важное на Мете
Похожие

Подписаться на ленту

Лента вопроса

Для подписки на ленту скопируйте и вставьте эту ссылку в вашу программу для чтения RSS.

Дизайн сайта / логотип © 2024 Stack Exchange Inc; пользовательские материалы лицензированы в соответствии с CC BY-SA . rev 2024.3.8.5973

Как точно узнать размер файла на диске?

Пишу на C# программу, которая должна высчитывать рекурсивно размер папок и файлов на диске.
Считал, что размер файла на диске равен длине файла, округленной вверх до целого числа кластеров. Также нужно нужно учитывать сжатые/разреженные файлы. Для получения данных о файловой системе использую функцию GetDiskFreeSpaceW, для получения размера файла — функцию GetCompressedFileSizeW.
Но сейчас заметил, что есть маленькие файлы, примерно до 500 байт, которые в меню «Свойства» занимают 0 байт на диске.

Свойства файла

624a51655789e224951910.png

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

Функция, которую использую для получения размера файла

public static long GetFileSizeOnDisk(string file_path) < string root_dir = ""; for (int i = 0; i < file_path.Length; i++) < root_dir += file_path[i]; if (file_path[i] == '\\' || (i == file_path.Length - 1)) break; >if (!file_path.StartsWith(@"\\?\")) file_path = @"\\?\" + file_path; // чтобы не было ошибки при длинных путях //FileInfo info = new FileInfo(file_path); uint dummy, sectorsPerCluster, bytesPerSector; int result = GetDiskFreeSpaceW(root_dir, out sectorsPerCluster, out bytesPerSector, out dummy, out dummy); //int result = GetDiskFreeSpaceW(info.Directory.Root.FullName, out sectorsPerCluster, out bytesPerSector, out dummy, out dummy); if (result == 0) throw new Win32Exception(); uint clusterSize = sectorsPerCluster * bytesPerSector; uint hosize; uint losize = GetCompressedFileSizeW(file_path, out hosize); long size; size = (long)hosize [DllImport("kernel32.dll")] static extern uint GetCompressedFileSizeW([In, MarshalAs(UnmanagedType.LPWStr)] string lpFileName, [Out, MarshalAs(UnmanagedType.U4)] out uint lpFileSizeHigh); [DllImport("kernel32.dll", SetLastError = true, PreserveSig = true)] static extern int GetDiskFreeSpaceW([In, MarshalAs(UnmanagedType.LPWStr)] string lpRootPathName, out uint lpSectorsPerCluster, out uint lpBytesPerSector, out uint lpNumberOfFreeClusters, out uint lpTotalNumberOfClusters);
  • Вопрос задан более года назад
  • 614 просмотров

6 комментариев

Простой 6 комментариев

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

Скорость передачи данных через ADSL-соединение равна 256000 бит/c. Передача файла через данное соединение заняла 16 секунд. Определите размер файла в Кбайт.

как это сделать ?

Голосование за лучший ответ
это 500 кб
256000/8=32000байт
32000/1024=31.25 Кбайт
31,25*16=500 Кбайт — размер файла
256000 бит/c * 16 = 4096000 бит/c
Похожие вопросы
Ваш браузер устарел

Мы постоянно добавляем новый функционал в основной интерфейс проекта. К сожалению, старые браузеры не в состоянии качественно работать с современными программными продуктами. Для корректной работы используйте последние версии браузеров Chrome, Mozilla Firefox, Opera, Microsoft Edge или установите браузер Atom.

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

Ваш адрес email не будет опубликован. Обязательные поля помечены *