filepath
#
Base
返回路径的最后一个元素
#
func main() {
path := filepath.Base("/path/to/file.txt")
fmt.Println(path) // 输出: file.txt
}
Clean
清理路径,去掉冗余元素
#
func main() {
path := filepath.Clean("/path/../to/file.txt")
fmt.Println(path) // 输出: /to/file.txt
}
Abs
返回路径的绝对路径
#
func main() {
path, err := filepath.Abs("relative/path/to/file")
if err != nil {
log.Fatal(err)
}
fmt.Println(path) //C:\Users\...\go\src\VideoForensic\test\relative\path\to\file
}
Dir
除去最后一个元素
#
func main() {
path := filepath.Dir("/path/to/file.txt")
fmt.Println(path) // 输出: /path/to
}
Ext
返回路径的扩展名
#
func main() {
ext := filepath.Ext("/path/to/file.txt")
fmt.Println(ext) // 输出: .txt
}
FromSlash
路径转换为系统特定的路径分隔符
#
func main() {
path := filepath.FromSlash("/path/to/file")
fmt.Println(path) // Unix 系统输出: /path/to/file,Windows 系统输出: \path\to\file
}
Glob
匹配文件列表
#
func main() {
matches, err := filepath.Glob("/path/to/*.txt")
if err != nil {
log.Fatal(err)
}
for _, match := range matches {
fmt.Println(match)
}
}
IsAbs
否是绝对路径
#
func main() {
isAbs := filepath.IsAbs("/path/to/file")
fmt.Println(isAbs) // Unix 系统输出: true
}
Join
路径拼接
#
func main() {
path := filepath.Join("/path", "to", "file.txt")
fmt.Println(path) // Unix 系统输出: /path/to/file.txt
}
Match
路径是否匹配
#
func main() {
matched, err := filepath.Match("*.txt", "file.txt")
if err != nil {
log.Fatal(err)
}
fmt.Println(matched) // 输出: true
}
Rel
返回相对路径
#
func main() {
relPath, err := filepath.Rel("/path/to", "/path/to/file.txt")
if err != nil {
log.Fatal(err)
}
fmt.Println(relPath) // 输出: file.txt
}
Split
路径分割
#
func main() {
dir, file := filepath.Split("/path/to/file.txt")
fmt.Println("Dir:", dir) // 输出: /path/to/
fmt.Println("File:", file) // 输出: file.txt
}
ToSlash
分隔符转换
#
func main() {
path := filepath.ToSlash("C:\\path\\to\\file")
fmt.Println(path) // Windows 系统输出: C:/path/to/file
}
VolumeName
返回路径中的卷名
#
func main() {
volume := filepath.VolumeName("C:\\path\\to\\file")
fmt.Println(volume) // Windows 系统输出: C:
}
Walk
递归遍历指定路径下的所有文件和目录
#
func main() {
root := "/path/to/directory"
err := filepath.Walk(root, func(path string, info os.FileInfo, err error) error {
if err != nil {
return err
}
fmt.Println(path)
return nil
})
if err != nil {
log.Fatal(err)
}
}
// getDirSize 返回指定文件夹下所有文件的总大小(以字节为单位)
func getDirSize(path string) (int64, error) {
var totalSize int64
// Walk 函数遍历指定路径及其子目录
err := filepath.Walk(path, func(filePath string, info os.FileInfo, err error) error {
if err != nil {
return err
}
// 如果是文件,累加文件大小
if !info.IsDir() {
totalSize += info.Size()
}
return nil
})
return totalSize, err
}
HasPrefix
路径包含前缀
#
func main() {
hasPrefix := filepath.HasPrefix("/path/to/file", "/path")
fmt.Println(hasPrefix) // 输出: true
}