1号
st公司
我看到的是
反斜杠
不会转义路径中的。在这种情况下,这不会是一个问题,但最好总是避开它们。
我修改了你的代码(
代码0.py
):
#!/usr/bin/env python3
import sys
import os
from ctypes import windll
if __name__ == "__main__":
print("Python {:s} on {:s}\n".format(sys.version, sys.platform))
src = r"C:\Windows\System32\calc.exe"
dst = os.path.join(os.getcwd(), "calc.exe") # Change this to your original path
kernel32_dll = windll.kernel32
copy_file_a = kernel32_dll.CopyFileA
copy_file_w = kernel32_dll.CopyFileW
reta = copy_file_a(src, dst, False)
retw = copy_file_w(src, dst, False)
print("CopyFileA returned: {:d}\nCopyFileW returned: {:d}\n".format(reta, retw))
输出
:
E:\Work\Dev\StackOverflow\q048927571>"e:\Work\Dev\VEnvs\py27x64_test\Scripts\python.exe" code0.py
Python 2.7.13 (v2.7.13:a06454b1afa1, Dec 17 2016, 20:53:40) [MSC v.1500 64 bit (AMD64)] on win32
CopyFileA returned: 1
CopyFileW returned: 0
E:\Work\Dev\StackOverflow\q048927571>"e:\Work\Dev\VEnvs\py35x64_test\Scripts\python.exe" code0.py
Python 3.5.4 (v3.5.4:3f56838, Aug 8 2017, 02:17:05) [MSC v.1900 64 bit (AMD64)] on win32
CopyFileA returned: 0
CopyFileW returned: 1
笔记
:
-
根据
[MS.Docs]: CopyFile function
:
如果函数成功,则返回值为非零。
-
我添加了
CopyFileW
混合中
-
根据输出,
CopyFileA
故障原因
Python 3
(我发现这是你的情况),并且
CopyFileW
故障原因
Python 2
.
这是因为
Python 2
,字符串为
8比特
(
char *
基于),而在
Python 3
他们是
Unicode
(
16位
(
wchar_t *
基于)基于
赢
)
-
自
ANSI标准
(
A.
)函数的版本与
宽的
(
W
)版本,建议使用后者
我们有失败的原因,但我们还没有完全做到。这里有一个更详细的例子(
代码1.py
):
#!/usr/bin/env python3
import sys
import os
from ctypes import windll, c_char_p, c_wchar_p, c_int
if __name__ == "__main__":
print("Python {:s} on {:s}\n".format(sys.version, sys.platform))
src = r"C:\Windows\System32\calc.exe"
dst = os.path.join(os.getcwd(), "calc.exe")
kernel32_dll = windll.kernel32
copy_file_a = kernel32_dll.CopyFileA
copy_file_a.argtypes = (c_char_p, c_char_p, c_int)
copy_file_a.restype = c_int
copy_file_w = kernel32_dll.CopyFileW
copy_file_w.argtypes = (c_wchar_p, c_wchar_p, c_int)
copy_file_w.restype = c_int
reta = copy_file_a(src.encode(), dst.encode(), False)
retw = copy_file_w(src, dst, False)
print("CopyFileA returned: {:d}\nCopyFileW returned: {:d}\n".format(reta, retw))
笔记
:
输出
:
E:\Work\Dev\StackOverflow\q048927571>"e:\Work\Dev\VEnvs\py27x64_test\Scripts\python.exe" code1.py
Python 2.7.13 (v2.7.13:a06454b1afa1, Dec 17 2016, 20:53:40) [MSC v.1500 64 bit (AMD64)] on win32
CopyFileA returned: 1
CopyFileW returned: 1
E:\Work\Dev\StackOverflow\q048927571>"e:\Work\Dev\VEnvs\py35x64_test\Scripts\python.exe" code1.py
Python 3.5.4 (v3.5.4:3f56838, Aug 8 2017, 02:17:05) [MSC v.1900 64 bit (AMD64)] on win32
CopyFileA returned: 1
CopyFileW returned: 1