使用Windows复制对话框复制

我目前正在shutil.copy2()复制大量的图像文件和文件夹(介于0.5和5个演出之间的任何位置)。 Shutil效果很好,但是太慢了。我想知道是否有一种方法可以将此信息传递给Windows进行复制并提供其标准传输对话框。你知道,这个家伙


http://img2.mukewang.com/606185c200016d5c03620208.jpg

很多时候,我的脚本所花费的时间大约是标准Windows副本所用时间的两倍,这让我感到紧张,因为我的python解释器在运行副本时会挂起。我多次运行复制过程,因此希望减少时间。


白猪掌柜的
浏览 383回答 3
3回答

呼如林

*碰撞* Windows 10!在您的所有帮助下,以及Virgil Dupras的send2trash:我只使用以下方法制作了香草Python版本ctypes:import osimport ctypesfrom ctypes import wintypesclass _SHFILEOPSTRUCTW(ctypes.Structure):    _fields_ = [("hwnd", wintypes.HWND),                ("wFunc", wintypes.UINT),                ("pFrom", wintypes.LPCWSTR),                ("pTo", wintypes.LPCWSTR),                ("fFlags", ctypes.c_uint),                ("fAnyOperationsAborted", wintypes.BOOL),                ("hNameMappings", ctypes.c_uint),                ("lpszProgressTitle", wintypes.LPCWSTR)]def win_shell_copy(src, dst):    """    :param str src: Source path to copy from. Must exist!    :param str dst: Destination path to copy to. Will be created on demand.    :return: Success of the operation. False means is was aborted!    :rtype: bool    """    if not os.path.exist(src):        print('No such source "%s"' % src)        return False    src_buffer = ctypes.create_unicode_buffer(src, len(src) + 2)    dst_buffer = ctypes.create_unicode_buffer(dst, len(dst) + 2)    fileop = _SHFILEOPSTRUCTW()    fileop.hwnd = 0    fileop.wFunc = 2  # FO_COPY    fileop.pFrom = wintypes.LPCWSTR(ctypes.addressof(src_buffer))    fileop.pTo = wintypes.LPCWSTR(ctypes.addressof(dst_buffer))    fileop.fFlags = 512  # FOF_NOCONFIRMMKDIR    fileop.fAnyOperationsAborted = 0    fileop.hNameMappings = 0    fileop.lpszProgressTitle = None    result = ctypes.windll.shell32.SHFileOperationW(ctypes.byref(fileop))    return not result✔在src和dst路径较长的Python 3.7和2.7上进行了测试。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python