琢磨着特意打开save和load界面实在繁琐,多花了整整两个步骤约6秒的时间,效率不高。所以把quick save 和quick load纳入考量。
一开始的quick总是不能对齐,看了目录才发先quick一共有12个存档,每次点击都会覆盖下一个存档而非当前存档。然而在游戏内部根本不能调用其他11个存档,不知道这种设计是为了啥……
由此优化了思路:
检测到某一个quick save发生了修改,就把这个文件复制12份,分别覆盖掉原文路径下的12个存档。
# 导入watchdog模块
import time
from watchdog.observers import Observer
from watchdog.events import FileSystemEventHandler
# 导入shutil模块用于复制文件
import shutil
# 定义源目录和目标目录
src_dir = "C:\\Users\\user\\AppData\\Roaming\\枕\\サクラノ刻"
dst_dir = "D:\\Sandboxie-Plus\\新建文件夹\\DefaultBox\\user\\current\\AppData\\Roaming\\枕\\サクラノ刻"
# 定义一个事件处理类,继承自FileSystemEventHandler
class MyHandler(FileSystemEventHandler):
# 重写on_modified方法,当文件被修改时触发
def on_modified(self, event):
# 获取被修改的文件路径
src_path = event.src_path
# 判断是否以save016或save017开头
if src_path.startswith("C:\\Users\\user\\AppData\\Roaming\\枕\\サクラノ刻\\save016") or src_path.startswith("C:\\Users\\user\\AppData\\Roaming\\枕\\サクラノ刻\\save017"):
# 获取文件名(不含路径)
filename = src_path.split("\\")[-1]
lastfilename = filename.split(".")[1]
# 打印提示信息
print(f"复制了{filename}到{dst_dir}")
for i in range(12):
# 生成新的文件名,从save0161.dat到save0172.dat
new_name = dst_dir+"\\"+"save0" + str(161 + i) + "."+lastfilename
# 复制并重命名文件到目标目录
shutil.copyfile(src_path, new_name)
if __name__ == "__main__":
# print(src_dir)
# print(dst_dir)
# 创建一个观察者对象
observer = Observer()
# 创建一个事件处理对象,并传入源目录和目标目录作为参数
handler = MyHandler()
# 让观察者对象监控源目录,并使用事件处理对象处理事件(递归监控所有子目录)
observer.schedule(handler, src_dir, recursive=True)
# 启动观察者对象(在后台运行)
observer.start()
# 用一个无限循环让程序保持运行状态,直到按下Ctrl+C退出
try:
while True:
time.sleep(1)
except KeyboardInterrupt:
observer.stop()
observer.join()
特别注意要在循环里写sleep(1),之前忘记导致资源消耗过大、文件复制速度下降上千倍……