GetSaveFileName()不返回XP上CD刻录临时区域的路径

时间:2010-06-25 14:11:50

标签: windows visual-c++ winapi windows-xp

我有一个功能,我将文件保存到用户指定的位置。我正在使用GetSaveFileName()来显示“另存为”对话框。然后我使用它返回的路径将文件写出到该位置。我注意到当用户在XP机器上选择CD-RW驱动器时它不起作用。这个过程在Vista和Windows 7上正常工作。我做了以下观察:

  1. 在Win7 / Vista上选择CD刻录机根文件夹(在我的情况下为F:)时,GetSaveFileName()返回的路径返回临时暂存区域的路径。
  2. 在XP上,选择CD刻录机根文件夹只返回F:\作为路径。但是,如果我使用“另存为”对话框创建子文件夹并将文件保存在此文件夹中(例如F:\文件夹),则该路径是临时文件夹的路径。
  3. 在XP中使用其他应用程序(如记事本)将正确地重定向到F:\。
  4. 的临时文件夹

    因此,只有在XP上保存到CD刻录机的根文件夹时才会出现此问题。如何在XP中实现与记事本相同的功能,并将另存为重定向到临时文件夹,这样我就可以为CreateFile()编写一个路径了?

1 个答案:

答案 0 :(得分:2)

我认为你回到某些路径的CD临时区域的事实是IShellFolder::GetDisplayNameOf功能工作方式的“副产品”。我发现对于CD刻录机,暂存区域中的文件或文件夹的PIDL将转换为引用暂存区域的字符串。 CD上存在的文件或文件夹的PIDL(无论它是否存在于暂存区域中)将转换为引用CD的字符串。因为CD上存在根文件夹(根据定义),所以它是以字符串形式返回的CD路径。

我建议你自己处理。您可以使用ICDBurn::GetRecorderDriveLetter函数获取录音机的驱动器号 - 然后与从GetSaveFileName()返回的字符串进行比较是微不足道的。如果您确实在CD刻录机上找回了路径,则可以使用SHGetFolderLocationCSIDL_CDBURN_AREA来获取暂存区域的路径 - 然后只需更换驱动器号的开头即可。路径字符串与暂存区域的路径。