Рэймонд Чен написал довольно подробную статью на «Почему NTFS и Explorer не соглашаются в сортировке файлов?»
Однако обратите внимание, что FindFirstFile()
и его родственники на самом деле не сортируют результаты - они просто возвращают файлы вам в любом порядке, в котором файловая система их передает. NTFS имеет порядок для своих собственных целей (и я не уверен, что этот порядок указан - то, что он кажется упорядоченным для вас, вероятно, просто счастливое совпадение). Файловые системы FAT и сетевые файловые системы будут иметь свой собственный порядок (или без порядка - файлы могут быть просто в каталоге в том порядке, в котором они были созданы - я думаю, что системы FAT такие).
Если вам нужен определенный порядок для файлов, возвращаемых FindFirstFile()
и друзьями, вам нужно сделать это самостоятельно.
Из FindFirstFile()
документов : «FindFirstFile не сортирует результаты поиска. Для получения дополнительной информации см. FindNextFile.»
И из документов для FindNextFile()
: «Порядок, в котором поиск возвращает файлы, например алфавитный порядок, не гарантируется и зависит от файловой системы. Если данные должны После сортировки приложение должно выполнить упорядочивание после получения всех результатов. "
CFileFind()
не дает никаких обещаний относительно порядка возвращаемых имен файлов - я был бы удивлен, если бы он также выполнил какую-либо сортировку (поскольку он должен был бы получить все возможные файлы из целевого каталога, прежде чем вернуть первый, который сможет снять).