在编程中操作文件非常常见,如读取或者写入文件,但是在此之前会先构造出文件路径,在python中有相应的os.path库,对于文件路径的操作很简单,如

  • os.path.basename 获取文件名
  • os.path.dirname 获取文件目录名
  • os.path.join 拼接文件路径
  • os.path.splitext 拆分文件,获取文件名和扩展名
  • os.path.adspath 获取文件绝对路径
  • os.path.exists 判断文件或者文件夹是否存在

以下尝试在go语言中对上面的这些方法进行实现

在go语言中操作文件路径主要使用 filepath 这个包,使用也比较简单,已经写在注释里了。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
package main

import (
"fmt"
"os"
"path/filepath"
)

func main() {
pwd,_ := os.Getwd() // 获取到当前目录,相当于python里的os.getcwd()
fmt.Println("当前的操作路径为:",pwd)
//文件路径拼接
f1 := filepath.Join(pwd,"test","1.txt")
fmt.Println("文件的路径为:",f1)
//文件的目录名
fmt.Println("文件的目录名:",filepath.Dir(f1))
//文件的文件名
fmt.Println("文件的文件名:",filepath.Base(f1))
//文件的绝对路径
adspath,_ := filepath.Abs("evn/3.txt")
fmt.Println("文件的绝对路径为:",adspath)
//拆分路径
dirname,filename := filepath.Split(f1)
fmt.Println("目录名为:",dirname,"文件名为",filename)
//扩展名相关
fmt.Println("f1的扩展名为:",filepath.Ext(f1))

//通过os.Stat()函数返回的文件状态,如果有错误则根据错误状态来判断文件或者文件夹是否存在
fileinfo,err :=os.Stat(f1)
if err!=nil{
fmt.Println(err.Error())
if os.IsNotExist(err){
fmt.Println("file:",f1," not exist!")
}
}else{
//判断路径是否为文件夹
fmt.Println(fileinfo.IsDir())
fmt.Println(!fileinfo.IsDir())
fmt.Println(fileinfo.Name())
}
}

运行的结果为:

1
2
3
4
5
6
7
当前的操作路径为: F:\GO\src\gobookcode
文件的路径为: F:\GO\src\gobookcode\test\1.txt
文件的目录名: F:\GO\src\gobookcode\test
文件的文件名: 1.txt
文件的绝对路径为: F:\GO\src\gobookcode\evn\3.txt
目录名为: F:\GO\src\gobookcode\test\ 文件名为 1.txt
f1的扩展名为: .txt