win32file
我有一个脚本来检测使用带有 python 的 API在硬盘驱动器上创建的一些文件
from win32file import CreateFile, ReadDirectoryChangesW
import win32con
def Watcher():
ExtensionScan = ['exe', 'dll', 'vbs', 'com', 'jar']
FILE_LIST_DIRECTORY = 0x0001
path_to_watch = "c:\\"
hDir = CreateFile(
path_to_watch,
FILE_LIST_DIRECTORY,
win32con.FILE_SHARE_READ |
win32con.FILE_SHARE_WRITE |
win32con.FILE_SHARE_DELETE,
None,
win32con.OPEN_EXISTING,
win32con.FILE_FLAG_BACKUP_SEMANTICS,
None
)
while True:
Results = ReadDirectoryChangesW (
hDir,
1024,
True,
win32con.FILE_NOTIFY_CHANGE_FILE_NAME |
win32con.FILE_NOTIFY_CHANGE_DIR_NAME |
win32con.FILE_NOTIFY_CHANGE_ATTRIBUTES |
win32con.FILE_NOTIFY_CHANGE_SIZE |
win32con.FILE_NOTIFY_CHANGE_LAST_WRITE |
win32con.FILE_NOTIFY_CHANGE_SECURITY,
None,
None
)
for Action, File in Results:
FullPath = "{}\\{}".format(path_to_watch, File).lower()
Extension = FullPath.split('.')[-1]
if Action == 1 and Extension in ExtensionScan:
Name = FullPath.split('\\')[-1]
print({FullPath: {"Name": Name, "Extension": Extension}})
此代码有效,但我希望所有硬盘上的观察者不是特定路径
path_to_watch = "c:\"
我有一个想法,Watcher(drive="D:\\")
通过对所有驱动器进行线程化来调用特定驱动器,如下面的代码:
Drives = ["C:\\", "D:\\", "E:\\"]
for i in Drives:
Thread(target=Watcher, args=(i,).start()
但是这种解决方案对处理器性能不利
最后,有没有办法内置win32file
这个解决方案或使用我的想法?
谢谢大家