问题标签 [shfileoperation]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
564 浏览

c++ - SHFileOperation的能力

SHFileOperation 是否支持同时移动和重命名文件?

我有一组文件:c:\ f1.bmp f2.bmp f3.bmp f4.bmp

我想将每个移动到新文件夹,并重命名它们:d:\ b1.bmp b2.bmp b3.bmp b4.bmp

我可以使用 SHFileOperation 吗?只做一次?非常感谢!

0 投票
2 回答
818 浏览

c++ - SHFileOperation FO_MOVE 在目标驱动器已满时删除文件

我有一段代码使用带有 FO_MOVE 操作的 windows SHFileOperation 函数。指定的其他标志是 FOF_NOCONFIRMATION | FOF_NOERRORUI | FOF_静音。

当目标驱动器已满时,观察到一种特别奇怪的行为。在这种情况下,MOVE 无法将文件放入目标文件夹,但源文件也丢失了。这是非常出乎意料的,这会导致数据丢失。

这是 SHFileOperation 的标准行为吗?如果目标驱动器有空间,我们可以有类似 MOVE 的东西,否则将文件留在原始位置?

0 投票
1 回答
1482 浏览

delphi - 在网络共享上移动文件时的性能问题

我正在编写一个可以在网络共享上复制文件的应用程序。通常文件在同一个物理硬盘驱动器上移动。如果您使用 Windows 资源管理器对此进行测试,此操作将执行得非常快。看来,Windows 知道相同的位置并进行真正的移动,而不是复制和删除(这会更慢)。

假设您要复制一组文件:

目的地例如:

该应用程序使用 Windows Shell API(我在 Delphi 中编写了该应用程序,但其他语言的问题也应该相同):

不幸的是,此代码执行“复制和删除”,这在大文件或文件很多的情况下要慢得多。我怎样才能避免这种情况?有没有办法告诉移动操作,文件夹在同一个硬盘上?也许网络路径还有其他一些符号。

还是 Windows Explorer 使用了不同的 API 函数?

做一个简短的比较:

  • 文件数:260
  • 每个文件的文件大小:11 kB
  • 进入资源管理器的时间:2 秒
  • 使用 SHFILEOPERATION 移动的时间:20 秒

我在我的开发系统上使用 Windows 7,但它也应该在 XP 上工作,所以我不能使用新的 IFileOperation 界面。

亲切的问候

0 投票
2 回答
5147 浏览

c++ - 双空终止字符串

为了使用 SHFileOperation,我需要将字符串格式化为双空终止字符串。

有趣的部分是我发现以下工作之一,但不是两者兼而有之:

有人对此有想法吗?

还有其他方法可以附加双终止字符串吗?

0 投票
1 回答
3087 浏览

c++ - SHFileOperation 不会移动文件夹的所有内容

这会在桌面上创建一个新文件夹,但不会将文件夹 .pfrom 的内容移动到文件夹 .pTo。

0 投票
1 回答
2618 浏览

winapi - 如果请求 FOF_NOERRORUI,则使用 SHFileOperation 复制目录结构失败

我有一个使用 SHFileOperation 将一个目录复制到另一个目录的工作代码。在这种情况下,这是 Pascal 代码,但我也一直在 C++ 中使用相同的函数,问题似乎与 Windows 核心有关,而不是特定的编程语言。

根据 MSDN,我想指定以下标志组合:

也就是说,我不需要进度条,我通过隐含的“是”答案来抑制有关文件和目录的所有可能问题,并且我不希望 GUI(对话框)中出现任何错误消息。

使用这种标志组合,函数返回错误 0x4C7(被用户取消,这是不正确的)。如果我删除 FOF_NOERRORUI 它可以在相同的输入参数和文件系统状态下正常工作。

不幸的是,我还需要抑制错误消息,并且需要 FOF_NOERRORUI 标志。

有人知道应该如何调整这种标志组合(可能是其他先决条件)以满足我的需求吗?

以下是那些可能认为存在一些错误的人的源代码:

0 投票
1 回答
974 浏览

delphi - 在工作线程中使用 SHFileOperation 是否安全?

我想拥有

  • 一个后台线程,它将通过SHFileOperation函数复制文件,一次总是只有一个SHFileOperation(但我希望它在线程中)
  • 我需要 UI 输出,所以我需要使用FOF_SIMPLEPROGRESS标志并将某些内容传递给Wnd成员

我有两个问题

  1. 从 main 以外的线程调用SHFileOperationwithFOF_SIMPLEPROGRESS标志(用于用户交互)是否安全?
  2. 如果是,我应该将什么句柄传递给Wnd成员?我试过主窗体的句柄,但是当例如覆盖确认对话框弹出并确认时,主窗体被发送到后台,这真的很奇怪

注意:我有这些操作的队列,所以SHFileOperation当时只执行一个(完成后,线程继续执行另一个操作,下一个可能是什么SHFileOperation

非常感谢

0 投票
3 回答
706 浏览

file-io - 如何编写只转发文件操作的 Linux 驱动程序?

我需要实现一个 Linux 内核驱动程序,它(在第一步中)只将所有文件操作转发到另一个文件(在后面的步骤中,这应该被管理和操作,但我不想在这里讨论这个)。

我的想法如下,但是在阅读时,内核崩溃了:

那么,谁能告诉我为什么?

0 投票
1 回答
510 浏览

c++ - SHFileOperation 当 pFrom = "" 时删除

我有一个涉及 SHFileOperation 的问题:

我的期望是,由于 pathSubDir 是“”,它不会删除任何内容,并且我应该得到 n 不等于 0。但是,事实并非如此。我最终得到了 n = 0,这意味着操作已成功完成。我很好奇是否有人可以向我解释为什么我的假设是错误的。谢谢你。

0 投票
1 回答
398 浏览

file-management - SHFileOperation 替换文件对话框

目前,SHFileOperation 有一些确认文件替换对话框,询问用户是否要替换文件。我发现这些很有用,但我希望能够修改它们发生的场景。相反,我想先将文件内容与bool compareFile()我编写的函数进行比较。然后,如果文件相同,则不会出现文件替换对话框。假设,我已经有一个工作compareFile()功能,有没有办法让我做到这一点?感谢您的时间。