golang 的 path/filepath 包接口函数实例分析

接口函数汇总

  1. ToSlash函数

func ToSlash(path string) string
功能:
将path中平台相关的路径分隔符转换成’/’

  1. 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是分隔符后面的部分不包含分隔符

  1. 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系统

  1. IsAbs函数

func IsAbs(path string) (b bool)
功能:判断该路径是否是绝对路径

  1. Abs函数

func Abs(path string) (string, error)
功能:获取path的绝对路径

  1. SplitList函数

func SplitList(path string) []string
功能:按os.PathListSeparator即(;)将路径进行分割

  1. VolumeName函数

func VolumeName(path string) string
功能:返回路径字符串中的卷名

  1. 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 []

猜你喜欢

转载自blog.csdn.net/weixin_38387929/article/details/119651856