網(wǎng)站如何做友情鏈接edm營(yíng)銷(xiāo)
概述
這個(gè)功能會(huì)非常強(qiáng)大,因?yàn)樵谌粘9ぷ髦?#xff0c;我通常會(huì)遇到需要批量刪除文件的場(chǎng)景,通過(guò)這個(gè)方法,再結(jié)合我的另一個(gè) 命令行開(kāi)發(fā)框架,能夠很輕松的開(kāi)發(fā)出這個(gè)功能。
代碼
package zdpgo_fileimport ("errors""os""path/filepath""strings"
)// DeleteFile 刪除文件
func DeleteFile(filePath string) error {if !IsExist(filePath) {return errors.New("要?jiǎng)h除的文件不存在")}err := os.Remove(filePath)if err != nil {return err}return nil
}// DeleteFileBySuffix 根據(jù)文件后綴進(jìn)行刪除
func DeleteFileBySuffix(dir, suffix string) error {// 校驗(yàn)?zāi)夸?/span>if !IsDir(dir) {return errors.New(dir + "不是一個(gè)有效的目錄")}// 校驗(yàn)后綴,為了安全,后綴不能為空if suffix == "" {return errors.New("文件后綴不能為空")}// 遍歷文件夾err := filepath.Walk(dir, func(fname string, fi os.FileInfo, err error) error {// 忽略目錄if fi.IsDir() {return nil}// 找到了,進(jìn)行刪除if len(suffix) == 0 || strings.HasSuffix(strings.ToLower(fi.Name()), suffix) {err = DeleteFile(fname){if err != nil {return err}}}return nil})return err
}// DeleteFileBySuffixRecursion 遞歸根據(jù)文件后綴刪除
func DeleteFileBySuffixRecursion(dir, suffix string) error {// 校驗(yàn)?zāi)夸?/span>if !IsDir(dir) {return errors.New(dir + "不是一個(gè)有效的目錄")}// 校驗(yàn)后綴,為了安全,后綴不能為空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}}// 找到了,進(jìn)行刪除if len(suffix) == 0 || strings.HasSuffix(strings.ToLower(fi.Name()), suffix) {err = DeleteFile(fname){if err != nil {return err}}}return nil})return err
}
測(cè)試
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)}// 根據(jù)文件后綴刪除文件err = DeleteFileBySuffix("test", ".txt")if err != nil {t.Error(err)}// 根據(jù)文件后綴查找文件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)}// 根據(jù)文件后綴刪除文件err = DeleteFileBySuffix("test", ".txt")if err != nil {t.Error(err)}// 根據(jù)文件后綴查找文件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)}
}