使用 Windows 复制对话框进行复制

2024-01-11

我目前正在使用shutil.copy2()复制大量图像文件和文件夹(0.5 到 5 GB 之间的任意位置)。Shutil工作正常,但是太慢了。我想知道是否有办法将此信息传递到 Windows 来制作副本并为我提供其标准传输对话框。你知道,这个人...

很多时候,我的脚本所花费的时间大约是标准 Windows 副本所花费时间的两倍,这让我担心我的 python 解释器在运行副本时挂起。我多次运行复制过程,希望减少时间。


如果您的目标是一个精美的复制对话框,SH文件操作 http://msdn.microsoft.com/en-us/library/windows/desktop/bb762164%28v=vs.85%29.aspxWindows API 函数提供了这一点。 pywin32 包有一个 python 绑定,ctypes 也是一个选项(例如 google“SHFileOperation ctypes”)。

这是我使用 pywin32 的(经过非常简单的测试)示例:

import os.path
from win32com.shell import shell, shellcon


def win32_shellcopy(src, dest):
    """
    Copy files and directories using Windows shell.

    :param src: Path or a list of paths to copy. Filename portion of a path
                (but not directory portion) can contain wildcards ``*`` and
                ``?``.
    :param dst: destination directory.
    :returns: ``True`` if the operation completed successfully,
              ``False`` if it was aborted by user (completed partially).
    :raises: ``WindowsError`` if anything went wrong. Typically, when source
             file was not found.

    .. seealso:
        `SHFileperation on MSDN <http://msdn.microsoft.com/en-us/library/windows/desktop/bb762164(v=vs.85).aspx>`
    """
    if isinstance(src, basestring):  # in Py3 replace basestring with str
        src = os.path.abspath(src)
    else:  # iterable
        src = '\0'.join(os.path.abspath(path) for path in src)

    result, aborted = shell.SHFileOperation((
        0,
        shellcon.FO_COPY,
        src,
        os.path.abspath(dest),
        shellcon.FOF_NOCONFIRMMKDIR,  # flags
        None,
        None))

    if not aborted and result != 0:
        # Note: raising a WindowsError with correct error code is quite
        # difficult due to SHFileOperation historical idiosyncrasies.
        # Therefore we simply pass a message.
        raise WindowsError('SHFileOperation failed: 0x%08x' % result)

    return not aborted

如果将上面的标志设置为,您还可以在“静默模式”(无对话框、无确认、无错误弹出窗口)下执行相同的复制操作shellcon.FOF_SILENT | shellcon.FOF_NOCONFIRMATION | shellcon.FOF_NOERRORUI | shellcon.FOF_NOCONFIRMMKDIR. See 文件操作结构 http://msdn.microsoft.com/en-us/library/windows/desktop/bb759795%28v=vs.85%29.aspx了解详情。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

使用 Windows 复制对话框进行复制 的相关文章

随机推荐

  • MySQL - SELECT + JOIN + ORDER BY 性能

    我有两个表 我需要从两个表中选择一些连接的数据 SELECT f FROM file data f JOIN subscriptions s ON f uid s elementid WHERE s uid 119762 AND f pri
  • FFMPEG 套件 iOS 异步调用未异步运行

    当我打电话给executeAsync的方法FFmpegKit我期望异步行为 但代码会运行但从不等待FFmpegKit executeAsync运行 因此 程序输出来自print FFmpeg process exited with stat
  • 将值添加到数据框的所有行

    我有两个熊猫数据框df1 长度为 2 和df2 长度约 30 行 df1 的索引值始终不同 并且不会出现在 df2 中 我想添加来自的列的平均值df1到相应的列df2 示例 将 0 6 添加到 c1 的所有行 将 0 9 添加到 c2 的所
  • 获取 Data.ByteString.Builder 的长度

    我有一个函数tabulate它接受一个对象列表以及将这些对象的字段转换为函数的列表Builders 它返回一个Builder代表一个格式良好的表格 例如 tabulate a gt Builder gt a gt Builder tabul
  • Android Studio 将 2 个 .aar 合二为一

    我有一个 Android Studio 库项目 它依赖于另一个库项目 顶级项目依赖于第二个库项目的代码和资源 当在客户端应用程序中仅使用顶级库项目 aar 时 找不到第二个库项目中的资源 那么在这种情况下我们是否必须始终使用 2 个 aar
  • 使用 PDO 与 Postgresql 连接速度慢

    我正在使用 php7 4 fpm 连接到 PostgreSQL 12 3 Ubuntu 12 3 1 pgdg18 04 1 当我使用 pgadmin4 时 查询在 129 毫秒内执行 结果立即显示在屏幕上 在 php 上执行相同的查询大约
  • Java android AsyncHttpClient 如何设置标头“Accept”“application/xml”或“application/json”

    我不知道如何为 applicatjon json 设置标头 Accept 现在我来自服务器的响应是 xml 但我想要一个 json 当我设置标头时 服务器应该向我发送一个 xml 这是我的代码 final JSONObject reques
  • WPF:动态视图/内容

    我是 WPF 的初学者 所以我问这个 假设我有一个窗口 在窗口内我想要有一些类似容器的东西 可以只是边框 也可以是面板 用 winform 术语来说 容器的内容绑定到所选选项 例如 按钮 因此 例如 当用户选择选项 1 时 容器显示图表 当
  • 做像 Twitter、Hash-Bang #! 这样的链接网址[重复]

    这个问题在这里已经有答案了 可能的重复 Facebook 和新 Twitter URL 中的 shebang hashbang 有何用途 https stackoverflow com questions 3009380 whats the
  • Django表单和html表单有什么区别

    我正在基于 html 表单提交方法来处理我的 django 项目 但最近 我开始知道存在 django 形式 请让我知道它们之间有什么区别 在 Django 中编写表单最终会生成 HTML 表单 Django 表单可以绑定到一个模型 然后该
  • mysql 中的平均时间差

    在我的sql中是否有一个函数可以查找标准时间格式的平均时间差 您可以使用timestampdiff http dev mysql com doc refman 5 1 en date and time functions html func
  • 变量声明与定义

    我正在阅读一些关于外部人员的信息 现在作者开始提到变量的声明和定义 通过声明 他提到了以下情况 如果声明了一个变量 没有为其分配空间 现在这让我感到困惑 因为我认为MOST时代的 当我在 C 中使用变量时 我实际上是在定义和声明它们 对吗
  • 如何使用 Firebase 创建好友列表? [关闭]

    Closed 这个问题需要多问focused help closed questions 目前不接受答案 我一直在网上研究如何使用 firebase 创建朋友列表系统 到目前为止 我运气不佳 获得的资源并不完全是我想要的 该应用程序的前提是
  • 无法从 LinkedIn 应用程序获取访问令牌。它在 onActivityResult 中返回 null

    我正在使用 linkedIn android sdk 登录应用程序 但无法获取访问令牌 void startAutheniticate LISessionManager getInstance getApplicationContext i
  • 使用 64 位 llvm-gcc 构建 32 位

    我有 64 位版本的 llvm gcc 但我希望能够构建 32 位和 64 位二进制文 件 有这个标志吗 我尝试传递 m32 适用于常规 gcc 但收到如下错误消息 jay andesite llvm gcc m32 test c o te
  • Angular 9 - 删除 Angular Material Stepper 上的默认图标(创建)

    我在 Angular 中遇到了这个恼人的问题 我通过添加到provides页面的 provide STEPPER GLOBAL OPTIONS useValue displayDefaultIndicatorType false showE
  • Play 商店崩溃报告:android.view.View$DeclaredOnClickListener.onClick 上存在 IllegalStateException

    我的一个应用程序收到了一些 IllegalStateException 的崩溃报告 堆栈跟踪表明它来自 android view View DeclaredOnClickListener onClick view 我在测试或日常使用中从未遇
  • 在保持状态的同时切换片段

    决定重写这个问题 我有三个片段 称为 A B C 每个片段都有一个视图 其中包含一些字段供用户填写 用户应该能够使用菜单在不同的片段之间切换 如果用户在片段 A 中填写信息 然后切换到 C 填写更多信息 然后切换回 A 则用户在 A 中键入
  • 使用时间模块测量经过的时间

    使用python中的Time模块可以测量经过的时间吗 如果是这样 我该怎么做 我需要这样做 以便如果光标在小部件中停留一段时间 就会发生事件 start time time time your code elapsed time time
  • 使用 Windows 复制对话框进行复制

    我目前正在使用shutil copy2 复制大量图像文件和文件夹 0 5 到 5 GB 之间的任意位置 Shutil工作正常 但是太慢了 我想知道是否有办法将此信息传递到 Windows 来制作副本并为我提供其标准传输对话框 你知道 这个人