Go实践-文件系统操作

simonzhao0536 · · 1768 次点击 · · 开始浏览    
这是一个创建于 的文章,其中的信息可能已经有所发展或是发生改变。

由于自己的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
}






有疑问加站长微信联系(非本文作者)

本文来自:CSDN博客

感谢作者:simonzhao0536

查看原文:Go实践-文件系统操作

入群交流(和以上内容无关):加入Go大咖交流群,或添加微信:liuxiaoyan-s 备注:入群;或加QQ群:1006366459

1768 次点击  
加入收藏 微博
暂无回复
添加一条新回复 (您需要 登录 后才能回复 没有账号 ?)
  • 请尽量让自己的回复能够对别人有帮助
  • 支持 Markdown 格式, **粗体**、~~删除线~~、`单行代码`
  • 支持 @ 本站用户;支持表情(输入 : 提示),见 Emoji cheat sheet
  • 图片支持拖拽、截图粘贴等方式上传