我有一个基于链接的命名空间扩展程序(文件夹不在本地存在)。 每当我尝试在使用ShellExtension的文件夹下保存文件时,我都会收到错误:
C:\ folderPath ...
路径不存在。
检查路径,然后重试。
我试图找到资源管理器调用的入口点,以便在它尝试保存之前创建文件夹,但我的所有尝试似乎都失败了。 我可以在" OnCommonDialogOKButtonClicked"上通过断点捕捉开放事件。方法
也许这是一个探险家的错误,但我不确定。
我在一些与ShellExtension相关的外部链接上找到了以下信息: linkshellextension我引用:
Unfortunatley这是资源管理器中的一个错误,我不知道如何在资源管理器中解决这个问题。 如果从命令提示符启动符号链接到.exe它可以正常工作,甚至像SpeedCommander这样的第三方探险家也可以这样做,但是探险家似乎有一个限制 有没有人知道注册表黑客在explorer.exe中启用它?请给我留言。
入口点在哪里? 这是一个糟糕的探险家设计? 我必须在导航时创建文件夹以解决问题吗?
答案 0 :(得分:1)
只要单击“保存”按钮,就必须在本地创建并存在该文件夹。 我猜你正在使用EZNamespace(根据你提供的方法) - 在内部,它在文件对话框被销毁后被调用。 这是他们糟糕的设计。
他们建议在导航时创建所有文件夹 - 但我找到了另一种方式。
它发生的原因是因为当对话框想要关闭时,路径应该存在(文件对话框通常使用一个选项来创建" PATHMUSTEXIST"或" FILEMUSTEXIST" in打开文件对话框的情况 - 在第三方应用程序创建对话框后无法更改。
我建议尝试在自定义虚拟文件夹中实施IObjectWithSite,这是一个例子:
只需改变所有"打开"到"保存"它会起作用。
最终它的作用是,它为该特定对话框挂钩并注册IFileDialogEvents。那么你可以控制它周围的一些动作(例如,使用" OnFileOk"而不是你的上述方法,它允许你取消" Ok"你的验证,并且也得到实际IShellItem被选中。
每当" OnFolderChange"被调用,您可以创建您的文件夹,并删除旧文件夹: https://msdn.microsoft.com/en-us/library/windows/desktop/bb775880(v=vs.85).aspx
确保在" ok"时不要销毁它。最终被点击,您可以在对话框被销毁时删除该文件夹(因此,如果用户决定取消,您的文件系统中将不会有垃圾文件夹)。
这应该在这里完成:
if (m_fileOpenDialog != NULL)
{
m_fileOpenDialog->Unadvise(m_cookie);
m_fileOpenDialog->Release();
m_fileOpenDialog = NULL;
m_cookie = 0;
}
如果按下"确定&#34>,请务必留一个标记。而不是删除文件夹。
如果该文件夹存在,将在指定的文件系统中创建该文件(您必须确保您的虚拟文件的GetDisplayName将指向真实的文件系统路径。
另一个重要的注意事项,每当" OnFileOk"如果被调用,你的文件将不(因为它在第三方应用程序的主线程上运行)。你将不得不等待它完成自己写入文件系统,然后如果你想要处理它。
由于这篇文章已经过时了,如果需要更具体的例子,只需点击评论即可供应。
祝你好运。