关于python2.7 在某些windows系统中,出现打开一个已存在的路径确报文件或目录不存在的问题

问题

笔者在工作中,需要访问、C:\\Windows\\System32\\winevt\\下的文件。笔者使用的是python的open函数。这就出现了标题所说的问题。测试代码如下:

fn = "C:\Windows\System32\winevt\Logs\Security.evtx"

fo = open(fn,"r")

出现这种问题之后,笔者,首先想到了权限,但是笔者尝试使用管理员权限运行这段代码,问题依然存在。百思不解中楼主分别试了试c,java语言其中c语言存在这种问题。

这样一来笔者就更不解了!幸运的是看到了这个提问https://q.cnblogs.com/q/82369/

原因

32位程序运行在64位windows系统中时,如果文件夹重定向未被禁用,那么对C:\\Windows\\System32\\、C:\Program Files的访问会被重定向到其他位置。这过程是由操作系统完成的。

解决方法:

C语言调用 Wow64DisableWow64FsRedirection 和 Wow64RevertWow64FsRedirection 在调用线程中禁用或恢复文件重定向。注意,禁用或恢复文件重定向只影响调用线程,其它线程或进程不受影响

python代码如下

import ctypes
kernel32 = ctypes.windll.LoadLibrary("kernel32.dll")
carg = ctypes.c_voidp(None)
kernel32.Wow64DisableWow64FsRedirection(carg)#文件操作之前禁用文件重定向
#打开文件以及文件操作
kernel32.Wow64RevertWow64FsRedirection(carg)#使用完毕后恢复之前的设置

猜你喜欢

转载自www.cnblogs.com/codeyi/p/11479400.html