Файловая система Windows нечувствительна к регистру. Как, учитывая имя файла/папки (например, "somefile" ), я получаю фактическое имя этого файла/папки (например, он должен возвращать "SomeFile", если Explorer показывает это так)?
Некоторые способы я знаю, все они кажутся довольно обратными:
- Учитывая полный путь, найдите каждую папку на пути (через FindFirstFile). Это дает правильные результаты для каждой папки. На последнем шаге выполните поиск самого файла.
- Получить имя файла из дескриптора (как в пример MSDN). Это требует открытия файла, создания сопоставления файлов, получения его имени, разбора имен устройств и т.д. Довольно запутанный. И это не работает для папок или файлов с нулевым размером.
Я пропустил какой-то очевидный вызов WinAPI? Простейшие, такие как GetActualPathName() или GetFullPathName(), возвращают имя с помощью оболочки, которая была передана (например, возвращает "программные файлы", если она была передана, даже если она должна быть "Program Files" ).
Я ищу собственное решение (не .NET).