接口函数汇总
- ToSlash函数
func ToSlash(path string) string
功能:
将path中平台相关的路径分隔符转换成’/’
- FromSlash函数
func FromSlash(path string) string
功能:
将 path 中的 ‘/’ 转换为系统相关的路径分隔符
3.Dir函数
func Dir(path string) string
功能:
获取path中最后一个分隔符之前的部分(不包含分隔符)
4.Base函数
func Base(path string) string
功能:
获取path中最后一个分隔符之后的部分(不包含分隔符)
5.Split函数
func Split(path string) (dir, file string)
功能:
获取path中最后一个分隔符前后的两部分,dir是分隔符前面的部分包含分隔符,
file是分隔符后面的部分不包含分隔符
- Ext函数
func Ext(path string) string
功能:
获取路径字符串中的文件扩展名
7.Rel函数
func Rel(basepath, targpath string) (string, error)
功能:
获取targpath相对于basepath的路径,要求targpaht和basepath必须"都是相对路径"或都是"绝对路径"
8.Join函数
func Join(elem …string) string
功能:将elem中的多个元素合并成一个路径,忽略空元素,清理多余字符
9.Clean函数
func Clean(path string) string
功能:清除path中多余的字符
规则如下:
1.如果有多个分隔符,则只留一个
2.消除每一个.(当前路径)路径名
3.消除每一个…(父目录)路径名,以及它之前的非…元素
2和3使用于linux系统
- IsAbs函数
func IsAbs(path string) (b bool)
功能:判断该路径是否是绝对路径
- Abs函数
func Abs(path string) (string, error)
功能:获取path的绝对路径
- SplitList函数
func SplitList(path string) []string
功能:按os.PathListSeparator即(;)将路径进行分割
- VolumeName函数
func VolumeName(path string) string
功能:返回路径字符串中的卷名
- EvalSymlinks函数
func EvalSymlinks(path string) (string, error)
功能:返回链接(快捷方式)所指向的实际文件
15.Match函数
func Match(pattern, name string) (matched bool, err error)
功能:根据pattern来判断name是否匹配,如果匹配则返回true
pattern 规则如下:
可以使用 ? 匹配单个任意字符(不匹配路径分隔符)。
可以使用 * 匹配 0 个或多个任意字符(不匹配路径分隔符)。
可以使用 [] 匹配范围内的任意一个字符(可以包含路径分隔符)。
可以使用 [^] 匹配范围外的任意一个字符(无需包含路径分隔符)。
[] 之内可以使用 - 表示一个区间,比如 [a-z] 表示 a-z 之间的任意一个字符。
反斜线用来匹配实际的字符,比如 * 匹配 *,[ 匹配 [,\a 匹配 a 等等。
[] 之内可以直接使用 [ * ?,但不能直接使用 ] -,需要用 ]、- 进行转义。
16.Glob函数
func Glob(pattern string) (matches []string, err error)
功能:列出与指定的模式 pattern 完全匹配的文件或目录(匹配原则同上)
实例
package main
import (
"os"
"io/ioutil"
"fmt"
"path/filepath"
"time"
)
func GetAllFile(pathname string, s []string) ([]string, error){
fromSlash := filepath.FromSlash(pathname)
//fmt.Println(fromSlash)
rd, err := ioutil.ReadDir(fromSlash)
if err != nil {
//log.LOGGER("Error").Error("read dir fail %v\n", err)
fmt.Println("read dir fail:", err)
return s, err
}
for _, fi := range rd {
if fi.IsDir() {
fullDir := filepath.Join(fromSlash,fi.Name())
s, err := GetAllFile(fullDir, s)
if err != nil {
fmt.Println("read dir fail:", err)
//log.LOGGER("Error").Error("read dir fail: %v\n", err)
return s, err
}
} else {
fullName := filepath.Join(fromSlash, fi.Name())
s = append(s,fullName)
}
}
return s,nil
}
func GetALLFIles_walk(pathname string)([]string){
StartTime :=time.Now();
dst_target :=[]string{
}
err := filepath.Walk(pathname, func(src string, f os.FileInfo, err error) error {
if f == nil {
return err
}
if f.IsDir(){
return nil
}else {
//进行文件的复制
dst_target=append(dst_target,src)
//return s
}
//println(path)
return nil
})
if err != nil {
fmt.Printf("filepath.Walk() returned %v\n", err)
return nil
//log.LOGGER("Error").Error("filepath.Walk() returned %v\n", err)
}
fmt.Println("Cost Time:",time.Since(StartTime))
return dst_target
}
func test() {
pwd,_ := os.Getwd()
filepath.Walk(pwd,func(fpath string, info os.FileInfo, err error) error {
if match,err := filepath.Match("???",filepath.Base(fpath));match {
fmt.Println("path:",fpath)
fmt.Println("info:",info)
return err
}
return nil
})
}
func main(){
s:=[]string{
}
n:=[]string{
}
pathname:="/home/robot/gomod/src"
fmt.Printf("filepath walk cost time returned \n")
n = GetALLFIles_walk(pathname)
fmt.Println("\n\r")
fmt.Println("the number of file is %v",len(n))
fmt.Println("\n\r")
fmt.Printf("io util cost time returned \n")
StartTime :=time.Now();
s,_=GetAllFile(pathname,s)
fmt.Println("Cost Time:",time.Since(StartTime))
fmt.Println("the number of file is %v,content is:%v",len(s),s)
}
运行结果
robot@ubuntu:~/gomod/src/file$ go run path.go
filepath walk cost time returned
Cost Time: 3.039487ms
the number of file is %v 789
io util cost time returned
Cost Time: 3.116647ms
the number of file is %v,content is:%v 0 []