Я думаю, тот факт, что вы возвращаете область подготовки CD для некоторых путей, является «побочным продуктом» работы функции IShellFolder::GetDisplayNameOf
. Я обнаружил, что для устройств записи компакт-дисков PIDL для файла или папки, в которой only существует в области подготовки, преобразуется в строку, ссылающуюся на область подготовки. PIDL для файла или папки, которая существует на компакт-диске (независимо от того, существует ли она также в области подготовки), преобразуется в строку, ссылающуюся на компакт-диск. Поскольку корневая папка (по определению) существует на компакт-диске, это путь к компакт-диску, который вы возвращаете в виде строки.
Я бы предложил разобраться с этим самостоятельно. Вы можете использовать функцию ICDBurn::GetRecorderDriveLetter
, чтобы получить букву диска рекордера - тогда тривиально сравнить ее со строкой, которую вы возвращаете из GetSaveFileName()
. Если вы вернетесь назад к устройству записи компакт-дисков, вы можете использовать SHGetFolderLocation
с CSIDL_CDBURN_AREA
, чтобы получить путь к области подготовки - тогда просто нужно заменить букву диска в начале строки пути на путь к месту подготовки.