python如果关闭已经探知打开的文件(已解决)
本帖最后由 ymhld 于 2020-3-26 16:24 编辑查到网上的一些代码,能探知是否由其他应用打开某文件,但怎么能关闭已经打开的文件呢
#-*- coding: utf-8 -*-
from ctypes import windll
import time
import win32file
fromwin32file import*
def is_open(filename):
try:
#首先获得句柄
vHandle =win32file.CreateFile(filename, GENERIC_READ, 0, None, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, None)
#判断句柄是否等于INVALID_HANDLE_VALUE
if int(vHandle)==INVALID_HANDLE_VALUE:
print("# file is already open")
return True# file is already open
win32file.CloseHandle(vHandle)
except Exception as e:
print(e)
这些不都是模块的函数吗,你去查相关文档啊,应该有说明
win32file.CloseHandle(vHandle
这个不就是用关闭上面分析都文件吗 先有我后有天 发表于 2020-3-25 12:13
这些不都是模块的函数吗,你去查相关文档啊,应该有说明
win32file.CloseHandle(vHandle
这个不就是用关 ...
你看上面的脚本,Vhandle是没有找到,产生了错误,才显示的文件被占用 ymhld 发表于 2020-3-25 13:33
你看上面的脚本,Vhandle是没有找到,产生了错误,才显示的文件被占用
我不知道你想问什么,按代码理解应该就是createfile函数的参数产生的的结果使得句柄的值做相应改变,你可以看这个函数的详细解释,
https://www.cnblogs.com/happy-kitty/p/11801583.html 类似于360和火绒的解除文件占用功能,猜测是调用系统函数实现的。 先有我后有天 发表于 2020-3-25 13:57
我不知道你想问什么,按代码理解应该就是createfile函数的参数产生的的结果使得句柄的值做相应改变,你可 ...
我的想法是探知到文件被占用后,想办法关闭这个文件,好重新用别的打开进行操作,但直接用那个close(vhandle),方法不对 葫芦炒鸡蛋 发表于 2020-3-25 13:59
类似于360和火绒的解除文件占用功能,猜测是调用系统函数实现的。
对,能被探知是占用了,我想关闭打开的文件,知道怎么关吗 先有我后有天 发表于 2020-3-25 13:57
我不知道你想问什么,按代码理解应该就是createfile函数的参数产生的的结果使得句柄的值做相应改变,你可 ...
from ctypes import windll
import time
import win32file
fromwin32file import*
def is_open(filename):
try:
#首先获得句柄
vHandle =win32file.CreateFile(filename, GENERIC_READ, 0, None, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, None)
#判断句柄是否等于INVALID_HANDLE_VALUE
print(vHandle)
if int(vHandle)==INVALID_HANDLE_VALUE:
print("# file is already open")
return True# file is already open
win32file.CloseHandle(vHandle)
except Exception as e:
print(e)
vHandle=(CreateFile(filename,
0,
0,
None,
OPEN_EXISTING,
0,
None ))
win32file.CloseHandle(vHandle)
return True
print (is_open('2020年公司经营总表.xlsx'))
这样还是关闭不了 你这只是调用 CreateFile 判断文件是否占用
如果文件已经占用 CreateFile 就会报错 所以不可能获取到 句柄也就是代码中的 vHandle
如果要找到打开文件的句柄, 需要枚举进程 然后创建句柄查看是否属于已经打开的文件.
https://www.cnblogs.com/mayingkun/p/7764377.html
https://blog.csdn.net/weixin_30875157/article/details/98158318
或者直接调用其他第三方程序, 比如说 Windows Sysinternals提供的 handle.exe
还有 Unlocker 等等
Virgo之最 发表于 2020-3-25 20:32
你这只是调用 CreateFile 判断文件是否占用
如果文件已经占用 CreateFile 就会报错 所以不可能获取到 句柄 ...
好的,谢谢,我试一下