我有一个function,我将文件保存到用户指定的位置。 我正在使用GetSaveFileName()来显示另存为对话框。 然后,我使用它返回的path将文件写出到该位置。 我注意到,当用户在XP机器上selectCD-RW驱动器时,它不起作用。 这个过程在Vista和Windows 7上正常工作。我已经提出了以下意见:
所以只有当保存到XP上的CD刻录机的根文件夹时才存在这个问题。 我怎样才能实现与记事本在XP中相同的function,并具有另存为redirect到临时文件夹,所以我有我可以写入CreateFile()的path?
我认为你找回某个路径的CD临时区域的事实是IShellFolder::GetDisplayNameOf
函数工作方式的“副产品”。 我发现对于CD刻录机,仅存在于暂存区域中的文件或文件夹的PIDL将转换为引用暂存区域的字符串。 CD上存在的文件或文件夹的PIDL(无论它是否存在于临时区域中)将转换为引用该CD的字符串。 由于CD上存在根文件夹(根据定义),因此它是以字符串形式返回的CD路径。
我会建议你自己处理这个。 您可以使用ICDBurn::GetRecorderDriveLetter
函数获取记录器的驱动器号 – 然后比较从GetSaveFileName()
返回的字符串是微不足道的。 如果您确实在CD刻录机上找回路径,则可以使用带有CSIDL_CDBURN_AREA
SHGetFolderLocation
来获取暂存区域的路径 – 然后只需将路径字符串开头的驱动器号替换为临时路径区。