Как узнать размер файла 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 байт на диске.
Свойства файла

Экспериментировал, создавал файл с пустого, до 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.