VC在编译时会自动生成一些临时文件,比如obj,pch等。当项目版本比较多的时候,这些文件在Debug和Release目录下占据了很大的空间。当然可以选择手工清理,不过考虑到这些文件是分散在不同的目录下,而且数量比较多,所以手工清理还是有些麻烦。于我写了一个简单的 Python 脚本来自动完成这一任务。下面这段代码扫描D盘下的所有目录,并删除目录下的有关临时文件:
1 from os.path import walk, join, normpath
2 from os import chdir, remove
3
4 def scan(arg, dirname, names)
5 for file in names:
6 if file[-4:]==".obj" or file[-4:]==".pch":
7 files = normpath(join(dirname,file))
8 chdir(dirname)
9 print "deleting", files
10 remove(file)
11 print "done!"
12
13 if __name__== "__main__":
14 path = chdir('d:\\\\')
15 walk(path, scan, 0)
2 from os import chdir, remove
3
4 def scan(arg, dirname, names)
5 for file in names:
6 if file[-4:]==".obj" or file[-4:]==".pch":
7 files = normpath(join(dirname,file))
8 chdir(dirname)
9 print "deleting", files
10 remove(file)
11 print "done!"
12
13 if __name__== "__main__":
14 path = chdir('d:\\\\')
15 walk(path, scan, 0)
对以上代码的简单分析和解释:
基本的想法是利用脚本对各个目录进行扫描,对目录下每一个文件进行判断,如果是VC生成的临时文件就删除掉。
VC临时文件名都有一定的特征,比如编译中间文件是obj,预编译头文件是pch。这些特征是判断一个文件是否应该被删除的依据。
walk(path, scan, 0) 是一个 Python 的内置函数。用来遍历目录 path。显而易见借助于 Python 提供的这个函数,扫描目录的工作比较轻松地完成了,从而使编程的难度降低许多,避免自己编写递归扫描函数。
最后要说明的一点是,删除某个文件时要知道它的绝对路径而且要在那个文件的所在目录下进行,否则 Python 会提示找不到要处理的文件。用normpath到了文件的绝对路径,chdir(dirname) 则把当前的目录变成要删除文件的所在目录。