在Windows中使用Python检测新文件创建
有没有办法用Python编程语言来检测在Windows上是否创建了新文件呢?
我知道这个问题可能听起来没什么意义,但我需要这些信息来开发一个程序,能够检测到我的电脑上是否有某个特定的应用程序(可能是病毒,或者其他无害的应用)创建了新文件。
3 个回答
-1
你需要建立一个包含电脑上所有文件的数据库,然后检查每一个可能的文件名(也就是遍历所有字符的ASCII值,然后增加或改变下一个字符,直到达到一个合理的长度),看看这些文件名是否存在。通过这种方式,你可以对比旧的数据库和新的数据库,看看有什么变化。
补充:这个链接可能会对你有帮助 在Python中浏览文件和子文件夹(在C盘或默认驱动器中搜索所有文件,并保存它们的位置)。
0
首先,你需要在你的电脑上安装一个叫做“watchdog”的工具。可以通过在命令行中输入以下命令来安装:
from watchdog.observers import Observer from watchdog.events import FileSystemEventHandler import subprocess as sp class MyHandler(FileSystemEventHandler): def on_any_event(self, event): print(event.event_type, event.src_path) def on_created(self, event): print("on_created", event.src_path) print(event.src_path.strip()) if((event.src_path).strip() == ".\test.xml"): print("Execute your logic here!") event_handler = MyHandler() observer = Observer() observer.schedule(event_handler, path='.', recursive=False) observer.start() while True: try: pass except KeyboardInterrupt: observer.stop()
接下来,你需要在电脑的任务调度器里创建一个定时任务,这样可以定期运行这个脚本。同时,你还要监控一个文件夹,看看里面是否会创建新的文件。
0
这是一个脚本,用来检查你指定的文件夹或驱动器里的所有文件,看看文件名有没有变化或者有没有新文件被添加进来。
import os
import pickle
from multiprocessing import Process
def scanner(root_dir, output):
temp = set()
#if not os.path.isfile(output): # if output does not exist create it
with open(output, 'a'):
pass
files = os.walk(root_dir) # go through all dirs and sub dirs
for root, dirs, f in files:
if f:
temp.update(f) # add all "f" files to the set
with open(output, 'rb') as data:
if os.path.getsize(output) > 0: # if the file has data, it is not the first run so load and compare
b = pickle.load(data)
print " Deleted files {}".format(b-temp) # if a file name has been changed been deleted
print "Amended or New files {}".format(temp-b) # if a file name has been changed or one added
with open(output, 'wb') as data: # write current files and save to output
pickle.dump(temp, data)
if __name__ == '__main__':
# start process for each drive
p1 = Process(target=scanner, args=("/path1", "data.pickle"))
p1.start()
p2 = Process(target=scanner, args=("/path2", "data1.pickle"))
p2.start()