通过python写一个程序,监控指定文件夹内文件的增,删,改情况,需要提供删除者,所删除的文件,调用系统API接口的程序名
时间: 2023-05-24 22:04:44 浏览: 114
以下是一个可以监控指定文件夹内文件增删改情况的Python程序:
```python
import os
import time
folder_to_watch = "/path/to/folder" # 要监视的文件夹路径
file_dict = {}
def get_file_info(file_path):
"""
获取文件的信息
"""
file_stat = os.stat(file_path)
file_size = file_stat.st_size
file_ctime = file_stat.st_ctime
file_mtime = file_stat.st_mtime
return {"size": file_size, "ctime": file_ctime, "mtime": file_mtime}
def handle_created_file(file_path):
"""
处理新增文件
"""
file_info = get_file_info(file_path)
file_dict[file_path] = file_info
print(f"新增文件:{file_path}")
def handle_deleted_file(file_path):
"""
处理删除文件
"""
file_info = file_dict.pop(file_path, None)
if file_info:
print(f"删除文件:{file_path},文件大小为:{file_info['size']},删除时间为:{time.time()}")
else:
print(f"删除文件:{file_path}")
def handle_modified_file(file_path):
"""
处理修改文件
"""
file_info = get_file_info(file_path)
if file_path in file_dict:
if file_dict[file_path]["size"] != file_info["size"]:
print(f"修改文件:{file_path},文件大小从{file_dict[file_path]['size']}修改为{file_info['size']},修改时间为:{time.time()}")
else:
print(f"修改文件:{file_path}")
else:
print(f"修改文件:{file_path}")
def watch_folder():
"""
监视文件夹
"""
for root, dirs, files in os.walk(folder_to_watch):
for file_name in files:
file_path = os.path.join(root, file_name)
handle_created_file(file_path)
while True:
for root, dirs, files in os.walk(folder_to_watch):
# 处理新增文件
for file_name in files:
file_path = os.path.join(root, file_name)
if file_path not in file_dict:
handle_created_file(file_path)
# 处理删除文件
removed_files = set(file_dict.keys()) - set([os.path.join(root, file_name) for file_name in files])
for file_path in removed_files:
handle_deleted_file(file_path)
# 处理修改文件
for file_name in files:
file_path = os.path.join(root, file_name)
handle_modified_file(file_path)
time.sleep(1)
if __name__ == "__main__":
watch_folder()
```
这个程序首先会遍历一遍指定文件夹内的所有文件,将它们的信息保存到一个字典中。然后,它会进入一个死循环,不断地遍历指定文件夹,检查文件的增删改情况,然后分别处理新增、删除、修改场景,并输出日志。其中,对于删除场景,如果检测到文件被删除,程序会尝试获取文件的信息(包括文件大小、创建时间和修改时间)并输出;如果文件不存在,则只会输出删除文件的日志。对于修改场景,程序会比对文件大小是否发生了变化,如果大小发生了变化,会输出文件大小的变化信息,否则仅输出修改文件的日志。
阅读全文