отвечать простым кросс-умножением ужасно снисходительно, я думаю, я уверен, что он это уже знал, это то, как мы постоянно угадываем вещи в своей голове.
Проблема с индикаторами выполнения операций с файлами заключается в том, что это верно только для единообразных данных, поэтому, если вы скопируете 100 файлов одинакового размера, а ваш диск больше ничего не делает, ожидаемый прогресс будет заметен, но что если первый 99 файлов были маленькими txt-файлами, а последний - большим видеофайлом? Прогресс будет выходной.
Эта проблема усугубляется, когда вы работаете не с файлами в одной папке, а с несколькими подпапками. Допустим, у вас есть 5 вложенных папок, и вы хотите удалить их (тогда размер не имеет большого значения), первые 4 папки содержат менее 10 файлов, поэтому к моменту, когда операция подходит к 5-й папке, она думает, что На 80% сделано, и папка Boom 5 содержит 5000 файлов, и ваш прогресс возвращается к 1%
WinXP пытался обойти это путем предварительного подсчета количества файлов, что означало, что, когда папка не была проиндексирована в Windows, в зависимости от количества файлов, XP не запускала операцию в течение первых 20 секунд (времени, которое требовалось для считать), который всех разозлил.
Так что, хотя у меня нет специальных знаний о том, как это делает Windows (но что еще там есть, кроме подсчета файлов и байтов), я надеюсь, что смогу проиллюстрировать, почему она несовершенна и почему она никогда не будет идеальной.
Лучшее, что вы могли бы сделать, - это не полагаться исключительно на количество файлов ИЛИ bytecount, а построить среднее из двух.
Или, если вы хотите сойти с ума, ОС может запустить базу данных о том, сколько времени эти операции выполнялись на вашей машине в прошлом, и учесть это в уравнении.
Заключительная мысль: если бы кто-то подумал о файловой системе, которая позволяла бы ОС знать, какой размер имеет каждая папка, без предварительного ее расчета, вы, по крайней мере, получили бы правильную оценку прогресса при удалении целых папок, а не только их частей.