go高频文件操作整理

发布时间:2024年01月15日

如有帮助,欢迎留下足迹哦!

目录

创建文件

带权限创建或打开

创建目录(单级、多级)

检查给定路径(目录、文件)是否存在

将目录和文件名拼接成为完整文件路径

给定文件路径获取文件后缀

给定文件路径获取文件名及其上级目录

判断给定路径是文件还是目录

统计目录下的文件数量

获取给定目录下的所有文件(包括子文件夹下的所有子文件)

给文件加权限(chmod)

获取文件的权限、判断文件是否具有可执行权限


创建文件

file, err := os.Create(fileName)

带权限创建或打开

mode := os.FileMode(0644) | os.ModePerm

// 注意:OpenFile默认以只读方式来打开文件,此时无需调用os.Create来创建。
// O_RDONLY为只读;O_CREATE为创建;O_WRONLY为只写;O_TRUNC为;打开并清空文件 ?模式可自选。
file, err := os.OpenFile(filePath, os.O_CREATE|os.O_WRONLY|os.O_TRUNC, mode)

创建目录(单级、多级)

func CreateDir(dir string) (bool, error) {

?? ?// 单级
?? ?// os.Mkdir()
?? ?
?? ?// 多级
?? ?if err := os.MkdirAll(dir, 0755); err != nil {
?? ??? ?return false, err
?? ?}

?? ?return true, nil
}

检查给定路径(目录、文件)是否存在

// 结果为true表示存在
func Exists(path string) bool {
?? ?_, err := os.Stat(path)
?? ?return err == nil
}

将目录和文件名拼接成为完整文件路径

filePath := filepath.Join("dir", "filename")

filePath := path.Join("dir", "filename")

区别是,前者自动基于操作系统来进行路径拼接,后者主要拼接通用的、与操作系统无关的路径格式。

注: linux下为/ ? windows下为反斜杠\ ?

给定文件路径获取文件后缀

ext = filepath.Ext(respPayload.FilePath)

给定文件路径获取文件名及其上级目录

fileDir, fileName = filepath.Split(file)

判断给定路径是文件还是目录

// isDir=false表示是文件
func IsDir(path string) (isDir bool, err error) {
?? ?f, err := os.Stat(path)
?? ?if err != nil {
?? ??? ?return
?? ?}

?? ?if f.IsDir() {
?? ??? ?isDir = true
?? ?}

?? ?return
}

统计目录下的文件数量

func GetFileNumbers(folder string) (numbers int) {
?? ?files, _ := ioutil.ReadDir(folder)
?? ?for _, file := range files {
?? ??? ?if !file.IsDir() {
?? ??? ??? ?numbers++
?? ??? ?}
?? ?}
?? ?return
}

获取给定目录下的所有文件(包括子文件夹下的所有子文件)

func GetFiles(folder string) (filesList []string) {
?? ?files, _ := ioutil.ReadDir(folder)
?? ?for _, file := range files {
?? ??? ?if file.IsDir() {
?? ??? ??? ?GetFiles(folder + "/" + file.Name())
?? ??? ?} else {
?? ??? ??? ?filesList = append(filesList, file.Name())
?? ??? ?}
?? ?}

?? ?return
}

给文件加权限(chmod)

// 如增加可执行权限
err := os.Chmod(fileName, os.FileMode(73))

获取文件的权限、判断文件是否具有可执行权限

func getAccess() {
?? ?info, err := os.Stat("./a")
?? ?if err != nil {
?? ??? ?return
?? ?}

?? ?mode := info.Mode() // 当前文件的权限

?? ?// |493|111101101|-rwxr-xr-x|----------|false|true|
?? ?fmt.Printf("|%d|%b|%v|%v|%v|%v|\n", mode, mode, mode.Perm(), mode.Type(), mode.IsDir(), mode.IsRegular())

?? ?// -rwxr-xr-x
?? ?fmt.Println(mode.String())

?? ?// 是否有有可执行权限,相当于和–x–x–x进行按位与操作
?? ?// 如果结果等于0111,说明文件对于所有者、组和其他用户都有执行权限。
?? ?if mode.Perm()&0111 == 0111 { // 或 mode.Perm()&73 == os.FileMode(73)
?? ??? ?// 有可执行权限
?? ??? ?fmt.Println("can executable")
?? ?} else {
?? ??? ?fmt.Println("no executable")
?? ?}
}


?

文章来源:https://blog.csdn.net/HYZX_9987/article/details/135555798
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。