概述
這個功能會非常強大,因為在日常工作中,我通常會遇到需要批量刪除文件的場景,通過這個方法,再結合我的另一個 命令行開發框架,能夠很輕松的開發出這個功能。
代碼
package zdpgo_fileimport ("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 + "/" + fnameerr = 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_fileimport "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 []stringfiles, 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 []stringfiles, 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)}
}