由于自己的PC笔记本,用的是可怜的120G SSD硬盘,相对于现在浩瀚无比的WIN7,VS ,硬盘空间少的可怜,经常导致硬盘空间不足。没办法,每次都人肉清除临时文件比如
VS编译时,生成的.obj文件 连接时生成的.pdb文件还有就是,VS2010引入的为了提高智能提示而生成的.sdf文件。
所以想到用程序自动实现这个功能,刚好正在学习go语言,全当练手了。
程序很简单,就是从某个目录递归开始,删除某些类型的文件
//My first go little program that clean dirty files for vs
package main
import (
"fmt"
"os"
"path"
"strings"
)
var FileTypes2Clean = []string{".sdf", ".obj", ".pdb", ".tlog"}
func main() {
dir_to_clean, _ := os.Getwd()
filecount, dirtysize := clean_dirtyfiles(dir_to_clean)
fmt.Printf("Total delete %d files , %d MBytes\n", filecount, dirtysize>>10>>10)
}
func clean_dirtyfiles(dir string) (filecount int64, dirtysize int64) {
//fmt.Println("To clean dirty files for " + dir)
f_dir, err := os.Open(dir)
if err != nil {
fmt.Println(err)
return
}
//enum files
fis, err_readdir := f_dir.Readdir(-1)
if err_readdir != nil {
fmt.Println(err_readdir)
return
}
for _, fi := range fis {
file_name := fi.Name()
if !path.IsAbs(file_name) {
file_name = path.Join(dir, file_name)
}
if fi.IsDir() {
sub_filecount, sub_dirtysize := clean_dirtyfiles(file_name)
filecount += sub_filecount
dirtysize += sub_dirtysize
continue
}
file_ext := strings.ToLower(path.Ext(file_name))
for _, ext := range FileTypes2Clean {
if ext != file_ext {
continue
}
fsize := fi.Size()
err_rm := os.Remove(file_name)
if err_rm == nil {
filecount += 1
dirtysize += fsize
fmt.Println("delete :" + file_name)
} else {
fmt.Println(err_rm)
}
} //for _, ext := range
} //
return
}