首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

Golang实现根据文件后缀删除文件和递归删除文件

概述

这个功能会非常强大,因为在日常工作中,我通常会遇到需要批量删除文件的场景,通过这个方法,再结合我的另一个 命令行开发框架,能够很轻松的开发出这个功能。

代码

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)

}

}

  • 发表于:
  • 原文链接https://page.om.qq.com/page/O825rIXvE_TVdFX4e_HWkjww0
  • 腾讯「腾讯云开发者社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 cloudcommunity@tencent.com 删除。

扫码

添加站长 进交流群

领取专属 10元无门槛券

私享最新 技术干货

扫码加入开发者社群
领券