问题标签 [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 回答
830 浏览

qt - SHFileOperation 使目录“不可删除”

好的,所以我有一个应用程序,它在 %TEMP% 目录中创建一个子目录来保存一些中间文件,而应用程序仍在运行。而且,当应用程序即将退出时,我将调用一个清理函数,以便再次从 %TEMP%递归删除我的子目录,这样我们就不会留下任何“垃圾”文件。到目前为止,这在 99.9% 的情况下都可以正常工作。但在极少数情况下,清理功能无法删除我的子目录!测试表明,当清理成功时,它总是在第一次尝试时这样做。而且,当它失败时,在第一次尝试中,重试没有帮助。我可以重试 9999 次,它会再次失败 9999 次。无赖!

因此,显然,“我的”目录由于某种原因被阻止了。现在,如果“我的”目录中还有一些文件(或子目录),我会明白这一点。但它完全是空的!没有文件(甚至没有隐藏文件!),也没有子目录。只是一个空目录。仍然无法删除。为了使事情更加模糊,它只是未能从我自己的进程中删除。它可以完美地从 Windows Explorer 或 Total Commander 中删除——即使我的进程仍在运行。

现在,经过数小时的测试,我发现SHFileOperation()是罪魁祸首。在某些情况下,我使用SHFileOperation()将文件复制“我的”目录。而且,每当我这样做时,由于未公开的原因,这会使该目录“不可删除”!再次说明:我通过SHFileOperation()复制到“我的”目录的文件可以完全删除。它是无法再删除的目录-只能从“我的”进程中删除。使用CopyFile()而不是SHFileOperation()立即解决了这个问题。我仍然想了解发生了什么SHFileOperation()函数...

如果有人有想法,我会很高兴知道...

问候!


〜更新#1〜

好的,所以我按照要求整理了一个示例:

方法#0是我最初所做的。而且,一旦我这样做,文件被复制到的目录(而不是文件本身!)稍后将变为“不可删除”。这是可重现的。而且,只要我使用方法#1或方法#2(并且根本没有进行其他更改),问题就解决了......

在第一篇文章中,我说这种情况很少发生。是的,因为(通常)函数“some_function”很少被调用。但是当这个函数被调用时(或者当我强迫它被调用时),问题总是会发生——至少只要我仍然使用复制方法#0

最后,当目录无法删除时,系统返回的错误是一个非常不具体的“访问被拒绝”(Win32 Error 0x5),所以这并没有多大帮助。如果确实发生了,那么问题就出现在RemoveDirectoy()函数以及QDir::rmdir()方法上。目录是的。


〜更新#2〜

好的,这是一个完整的示例,改编自 Harry Johnston 提供的代码:

结果是: RemoveDirectory 失败:错误 5

0 投票
1 回答
1238 浏览

python-2.7 - python win32com shell.SHFileOperation - 有什么方法可以获取实际删除的文件?

在我维护的代码中,我遇到了:

Python27\Lib\site-packages\win32comext\shell\(注意 win32comext)中,我只有一个shell.pyd二进制文件。

  1. 删除的 shell.SHFileOperation 的返回值是多少(operation=FO_DELETE在上面的调用中)?shell.pyd 的代码在哪里?
  2. 我可以从该返回值中获取实际删除的文件列表,还是必须事后手动检查?

编辑:接受的答案回答 Q1 - 查看pywin32-219\com\win32comext\shell\src\shell.cpp我看到SHFileOperationstatic PyObject *PySHFileOperation()的代表的来源,它似乎没有返回有关哪些文件未能被删除的任何信息- 所以我猜 Q2 的答案是“否”。

0 投票
1 回答
985 浏览

winapi - 忽略 SHFileOperation 中的独占锁定文件

我正在使用 Windows 7 Professional,并且我正在使用SHFileOperation()将一个文件夹内容递归复制到另一个文件夹。但是有一个锁定的文件(由应用程序独占打开);我需要跳过它,但SHFileOperation()在尝试复制此文件时返回 0x20。

如何在文件复制操作期间跳过此文件?

更新:这是代码:

0 投票
0 回答
148 浏览

python - 在 Windows 上使用 Python os.remove 删除连接的文件是否安全

在 Windows 上,如果需要,创建文件 filename.htm 有时会同时创建关联的文件夹 filename.files。如果我们删除filename.htm,关联的文件夹也会同时被删除。

据此,是 Windows Explorer 的一种行为。它被称为“连接文件”。这将讨论 SHFileOperation。

我可以模仿 Python 的行为吗?Pythonos.remove()或者win32api.DeleteFile()不会做同样的事情。

我担心粗暴地删​​除文件和文件夹会使 Windows 资源管理器感到困惑。或者在注册表中留下一些无用的东西?

0 投票
1 回答
952 浏览

c++ - SHFileOperation 错误 87

我正在尝试将 A 驱动器的内容复制到文件夹 C:\test\disk1 中。文件夹 disk1 已存在。程序编译但运行时出现错误 87。我知道错误 87 与无效参数有关,但我不确定问题出在哪里。有人有什么想法吗?

0 投票
1 回答
40 浏览

python - 在 python 脚本中执行 python 脚本时,我没有得到完整的输出

在 python 脚本中执行 python 脚本时,我没有得到完整的输出。就我而言:

其中 capture.py 将捕获数据包并将其提供给 capture.log。

Capture.py 将继续每 100 秒发送一次数据包。我看不到文件的完整输出。只有初始捕获被放入 capture.log 因为 capture.py 在一段时间后不会捕获任何数据包。

但是,当我在 bash 提示符下通过“python -u”执行相同的脚本时,它可以工作。

0 投票
0 回答
137 浏览

c++ - SHfileoperation - 使用字符串变量作为目标路径

以下代码要求用户命名文件夹。使用用户输入创建一个目录,例如 C\test\user input\disk1。使用 SHfile 操作,我想将 A 驱动器中的所有文件传输到字符串变量 disk1T 中包含的用户定义路径中。该程序无法编译,我收到以下错误。

C:\C++\file\main.cpp|39|错误:在初始化中无法将 'std::__cxx11::string {aka std::__cxx11::basic_string}' 转换为 'const wchar_t* const'|

有人有什么想法吗?

0 投票
1 回答
618 浏览

c - SHFileOperation:删除文件时随机引发异常

我正在使用 SHFileOperation() 从特定路径中删除目录。它是在多个线程中完成的,并且被删除的目录总是不同的。

有时,它会抛出异常:

del.exe 中的 0x00007FF8AF5D9D2A (ntdll.dll) 引发异常:0xC0000008:指定了无效句柄

和这个:

在 del.exe 中的 0x00007FF8ACC90A36 (shell32.dll) 处引发异常:0xC0000005:访问冲突读取位置 0x0000000000000001。

模块:

这是代码:

pwstrPath 末尾有一个双空终止符。

这些异常的原因是什么?

编辑

堆栈跟踪:

在此处输入图像描述

0 投票
2 回答
462 浏览

winapi - SHFileOperation 工作,但打印错误消息

我正在使用 Shell API 复制包含文件的文件夹。

一切正常,文件夹被复制到驱动器 F:问题是消息

在 Visual Studio 调试控制台中打印。文件夹 000 中有 100 个文件,并打印了 100 条消息。

我应该担心这些吗?我在 Windows 10 上使用 VS 2017。

更新 我尝试过使用另一台设备,我在 VS2017 和 VS2008 中都看到了相同的错误。但是,通用闪存驱动器没有此类错误。所以它似乎与我使用的设备上的大容量存储实现有关。我在 SDK 的任何地方都没有找到文件 filesystem.h。

0 投票
0 回答
583 浏览

winapi - Windows 10 1709 中的 SHFileOperation 慢得多

我们发现在更新到 1709 的系统上使用 SHFileOperation 删除文件夹的速度非常慢。似乎有一些与通用 Windows 应用程序相关的东西导致了这种情况。

这段代码:

传递了一个类似“C:\Jobs\Job1”的路径(是的,双空终止),文件夹中有少量文件——比如 2 或 3——在 Windows 7 和 Windows 10 1511 上以毫秒为单位运行。在 Windows 10 1709需要 1 到 3 秒。

我们在 Visual Studio 2013 的输出窗口中注意到,在调用 SHFileOperation 之后和返回之前,有 3 或 4 条这样的消息:

onecoreuap\shell\windows.storage\sharedstoragesources\util.cpp(2831)\windows.storage.dll!7650BF24: (caller: 765D88E4) ReturnHr(1) tid(1bb0) 80070490 找不到元素。

这是一个用 VS2013 构建的 Win32、x86 应用程序。这发生在我们已经发布超过 18 个月的版本中。回顾一下版本在 1511 和 Windows 7 上按预期运行,在最后两个 Windows 10 更新上太慢了。不知何故,我们似乎与通用 Windows 应用程序 DLL 纠缠不清。我们如何避免这种情况?