GetSaveFileName()不返回CD上刻录临时区域的path

我有一个function,我将文件保存到用户指定的位置。 我正在使用GetSaveFileName()来显示另存为对话框。 然后,我使用它返回的path将文件写出到该位置。 我注意到,当用户在XP机器上selectCD-RW驱动器时,它不起作用。 这个过程在Vista和Windows 7上正常工作。我已经提出了以下意见:

  1. GetSaveFileName()返回的path在Win7 / Vista上selectCD刻录机根文件夹(F:在我的情况下)返回临时登台区域的path。
  2. 在XP上,selectCD刻录机根文件夹只是返回F:\作为path。 但是,如果我使用另存为对话框创build一个子文件夹并将文件保存在此文件夹(例如F:\文件夹)中,path是临时文件夹的path。
  3. 在XP中使用另一个应用程序(如记事本)将正确地redirect到F:\的临时文件夹。

所以只有当保存到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来获取暂存区域的路径 – 然后只需将路径字符串开头的驱动器号替换为临时路径区。