filepath

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
}