Raymond Chen из Microsoft написал сообщение, которое, вероятно, применимо здесь: Computing the size of a directory is more than just adding file sizes. По сути, он объясняет, что информация, подобная размеру каталога, не может быть сохранена в записи dir, поскольку разные пользователи могут иметь разные разрешения, возможно, делая некоторые из файлов невидимыми для них. Поэтому единственный способ получить размер, который должен видеть пользователь, - рассчитать его по запросу пользователя.
В вашем случае ответ, вероятно, проистекает из тех же соображений. Список каталогов, доступных вашему приложению, может быть определен только тогда, когда ваше приложение запрашивает его, так как его представление о корневом каталоге может отличаться от другого приложения, работающего с разными учетными данными. Почему Windows хранит каталоги вместе с файлами, которые я не знаю, но это данные.
Поскольку Win32 находится так близко, как вы попадаете в файловую систему в пользовательском режиме, я бы избегал любых решений более высокого уровня, таких как .NET, поскольку это могло бы упростить интерфейс. Драйвер может работать быстрее, но это выходит за рамки моих знаний.
скажем, 99995 файлов и один подкаталог в конце списка FindNextFile. если я попробую 99995 раз, тогда скажу: да, он содержит подкаталог? – user25749
Yeap, это единственный способ перечислить содержимое каталога на Win32. Вот почему открытие папки со многими файлами в проводнике занимает столько времени. – sharptooth
OMG, очень плохой дизайн ... – user25749