赞
踩
这个功能会非常强大,因为在日常工作中,我通常会遇到需要批量删除文件的场景,通过这个方法,再结合我的另一个 命令行开发框架,能够很轻松的开发出这个功能。
package zdpgo_file import ( "errors" "os" "path/filepath" "strings" ) // DeleteFile 删除文件 func DeleteFile(filePath string) error { if !IsExist(filePath) { return errors.New("要删除的文件不存在") } err := os.Remove(filePath) if err != nil { return err } return nil } // DeleteFileBySuffix 根据文件后缀进行删除 func DeleteFileBySuffix(dir, suffix string) error { // 校验目录 if !IsDir(dir) { return errors.New(dir + "不是一个有效的目录") } // 校验后缀,为了安全,后缀不能为空 if suffix == "" { return errors.New("文件后缀不能为空") } // 遍历文件夹 err := filepath.Walk(dir, func(fname string, fi os.FileInfo, err error) error { // 忽略目录 if fi.IsDir() { return nil } // 找到了,进行删除 if len(suffix) == 0 || strings.HasSuffix(strings.ToLower(fi.Name()), suffix) { err = DeleteFile(fname) { if err != nil { return err } } } return nil }) return err } // DeleteFileBySuffixRecursion 递归根据文件后缀删除 func DeleteFileBySuffixRecursion(dir, suffix string) error { // 校验目录 if !IsDir(dir) { return errors.New(dir + "不是一个有效的目录") } // 校验后缀,为了安全,后缀不能为空 if suffix == "" { return errors.New("文件后缀不能为空") } // 遍历文件夹 err := filepath.Walk(dir, func(fname string, fi os.FileInfo, err error) error { // 忽略目录 if fi.IsDir() { newDir := dir + "/" + fname err = DeleteFileBySuffixRecursion(newDir, suffix) if err != nil { return err } } // 找到了,进行删除 if len(suffix) == 0 || strings.HasSuffix(strings.ToLower(fi.Name()), suffix) { err = DeleteFile(fname) { if err != nil { return err } } } return nil }) return err }
package zdpgo_file import "testing" func TestDeleteFileBySuffix(t *testing.T) { var err error // 添加文件夹 err = AddDir("test") if err != nil { t.Error(err) } // 添加文件 err = AddFile("test/test.txt", []byte("hello world")) if err != nil { t.Error(err) } err = AddFile("test/test.txt2", []byte("hello world")) if err != nil { t.Error(err) } // 根据文件后缀删除文件 err = DeleteFileBySuffix("test", ".txt") if err != nil { t.Error(err) } // 根据文件后缀查找文件 var files []string files, err = FindDirBySuffix("test", ".txt") if err != nil { t.Error(err) } if len(files) != 0 { t.Errorf("len(files) should be 0, but %d", len(files)) } files, err = FindDirBySuffix("test", ".txt2") if err != nil { t.Error(err) } if len(files) != 1 { t.Errorf("len(files) should be 1, but %d", len(files)) } // 删除文件夹 err = DeleteDir("test") if err != nil { t.Error(err) } } func TestDeleteFileBySuffixRecursion(t *testing.T) { var err error // 添加文件夹 err = AddDir("test/a/b/c") if err != nil { t.Error(err) } // 添加文件 err = AddFile("test/test.txt", []byte("hello world")) if err != nil { t.Error(err) } err = AddFile("test/a/test.txt", []byte("hello world")) if err != nil { t.Error(err) } err = AddFile("test/a/b/test.txt", []byte("hello world")) if err != nil { t.Error(err) } err = AddFile("test/a/b/c/test.txt", []byte("hello world")) if err != nil { t.Error(err) } // 根据文件后缀删除文件 err = DeleteFileBySuffix("test", ".txt") if err != nil { t.Error(err) } // 根据文件后缀查找文件 var files []string files, err = FindDirBySuffix("test", ".txt") if err != nil { t.Error(err) } if len(files) != 0 { t.Errorf("len(files) should be 0, but %d", len(files)) } // 删除文件夹 err = DeleteDir("test") if err != nil { t.Error(err) } }
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。