在Windows中使用Python检测新文件创建

1 投票
3 回答
941 浏览
提问于 2025-04-18 07:19

有没有办法用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()

撰写回答