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