如何使用Python的os模块检测文件夹是否被打开
检测文件夹是否被打开的正确方法
你的代码没法正常运行,核心问题有两个:
open()函数是用来打开文件的,不能直接打开文件夹,调用它访问文件夹会直接抛出权限错误- 逻辑搞反了:你现在的逻辑是“能打开文件夹就提示被打开”,但实际应该是“当文件夹被其他进程占用(比如资源管理器打开着)时,无法以独占方式访问它”
下面是Windows系统下可行的实现方案:
首先需要安装pywin32库,打开命令行执行:
pip install pywin32
然后用以下代码检测:
import win32file import win32con import time FOLDER_PATH = r"C:\Users\Me\OneDrive\Bureau\Myfolder" def is_folder_open(folder_path): try: # 尝试以独占模式打开文件夹 handle = win32file.CreateFile( folder_path, win32con.GENERIC_READ, 0, # 0表示不允许其他进程访问(独占模式) None, win32con.OPEN_EXISTING, win32con.FILE_ATTRIBUTE_NORMAL, None ) win32file.CloseHandle(handle) return False except win32file.error as e: # 错误码32表示文件/文件夹被其他进程占用 if e.winerror == 32: return True # 其他错误(比如路径不存在) raise while True: if is_folder_open(FOLDER_PATH): print("文件夹被打开了!") time.sleep(1) # 每秒检测一次,避免占用过多资源
代码说明
win32file.CreateFile:Windows API的封装,用来打开文件/文件夹,这里设置0作为共享模式,意味着只有当前进程能访问该文件夹- 如果返回错误码32,说明文件夹已经被其他进程(比如资源管理器、Office等)占用,即处于打开状态
- 加入
time.sleep(1)是为了减少循环的资源消耗,你可以根据需求调整检测间隔
内容的提问来源于stack exchange,提问作者Bossxp 1
相关产品推荐
相关产品推荐

