一、简介:

1.实现本地定时备份,备份文件夹产生按照时间排序的迭代文件夹;
2.第一次备份将源文件夹内所有文件备份至备份文件夹,后面只备份发生内容变更的文件;
3.不具备子文件夹备份功能,只备份文件;
4.word的临时文件可以备份,但不保证所有程序都给予临时文件的读权力,因此做了无法读取跳过的设计,所以未保存及关闭的文件可能无法备份;
5.进程内存的实时显示;
6.使用了多线程(伪);
7.因无全面的测试,建议只备份文档、图片等不复杂的文件;
8.有一实时删除备份文件夹内空文件夹的线程,但做了保守设置,结束时可能会对最后1-2个空文件夹进行留存;
9.有文件夹复制时进度条;
10.有倒计时进度条;
11.保守设计,定时全部为0也有1s延时;
12.有完整log;
13.半透明界面。
界面:
image.png
log:
image.png

二、部分源码:

1.轮子……:

  1. import os,signal,psutil#读取文件夹等 杀死进程 内存占用
  2. import shutil#复制文件
  3. import datetime
  4. import time
  5. import hashlib#哈希验证
  6. from tkinter import *#UI需要
  7. import threading#多线程
  8. from tkinter import filedialog#选择路径需要
  9. import tkinter.font as tkFont#字体设置
  10. import tkinter.ttk#进度条需要

2.多线程、死循环跳出及杀进程退出:

  1. #多线程
  2. t1 = threading.Thread(target=lambda:[first()],daemon=True)#守护线程daemon=True 线程1
  3. t2 = threading.Thread(target=lambda:[stop()],daemon=True) #守护线程daemon=True 线程2
  4. t3 = threading.Thread(target=lambda:[clear()],daemon=True)#守护线程daemon=True 线程3
  5. def t1st():
  6. t1.start()
  7. def t3st():
  8. t3.start()
  9. def t2st():
  10. t2.start()
  11. def stop():
  12. varF_0.set('9')#设置变量为9
  13. time.sleep(1)#等待1s
  14. os.kill(os.getpid(), signal.SIGINT)#杀死进程
  15. .............................
  16. while 1 == 1:
  17. if varF_0.get()== '1':
  18. progressbarthree['maximum'] = time1-1 # 进度值最大值
  19. progressbarthree['value'] = time1-1 # 进度值初始值
  20. for p in range(int(time1)):
  21. time.sleep(1)
  22. progressbarthree['value'] -= 1 # 进度条-1
  23. window.update()
  24. second(dictA, dst_dir, src_dir, dirs_1)
  25. else:
  26. time.sleep(1)
  27. break

三、程序包:

CopyII.7z