【问题标题】:Windows incorrectly copying files by filename when in a Special FolderWindows 在特殊文件夹中错误地按文件名复制文件
【发布时间】:2012-11-24 03:44:18
【问题描述】:

如果我将文件从 special folder 复制到剪贴板,更改特殊文件夹指向的位置,然后尝试将文件粘贴到这个新位置,Windows 会抱怨 Item Not Found error,似乎试图复制仅按文件名的文件。

我更改特殊文件夹位置的方法是使用这行 C++ 代码:

SHSetKnownFolderPath(FOLDERID_Desktop, 0, NULL, new_location);

并且刷新一下就可以立即看到效果:

SHChangeNotify(0x8000000, 0x1000, NULL, NULL);

复制步骤

  1. 桌面指向C:\Users\BoppreH\Desktop

  2. 从桌面复制文件music 1.mp3 (C:\Users\BoppreH\Desktop\music 1.mp3)

  3. 将桌面特殊文件夹的位置更改为D:\music

  4. 桌面现在显示来自D:\music的音乐

  5. 尝试将music 1.mp3粘贴到桌面

它以Item Not Found 失败,抱怨它无法在D:\music\music 1.mp3 找到文件,而文件仍然愉快地位于C:\Users\BoppreH\Desktop\music 1.mp3。如果我将文件粘贴到不是桌面的任何其他文件夹中,它可以正常工作。

我知道这是 Doctor 的一个例子,我这​​样做会很痛,并且不断改变桌面的位置是非常不寻常的行为,但这是我已经成长为的一个功能爱,这个虫子经常咬我。

这个问题有解决办法吗?

【问题讨论】:

    标签: windows windows-7 desktop relative-path


    【解决方案1】:

    使用某种类型的folder watcher 控件来检测特殊文件夹位置何时发生更改,并检查剪贴板中是否存在引用旧位置的任何文件路径并更新它们。

    或者在复制文件之前更改特价商品的位置。

    【讨论】:

    • 好主意,但使用GetClipboardData,唯一可用的剪贴板格式是CF_HDROP,它返回所有复制文件的列表已经在正确的绝对路径中。然而,当我尝试粘贴时,Windows 仍然抱怨它无法在新文件夹中找到该文件。我不确定是否可以应用第二种解决方法,但我会考虑的。
    • 我的错误,还有其他格式,但仅CF_HDROP 就足以复制文件。在更改桌面之前,我将数据复制到CF_HDROP,清空剪贴板,然后只放回CF_HDROP。现在 Windows 只能访问绝对路径并成功复制文件。到目前为止没有副作用。非常感谢。
    猜你喜欢
    • 2023-04-01
    • 2011-10-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-11-21
    • 2011-03-29
    相关资源
    最近更新 更多