path/filepath包下的相关函数
1. ToSlash函数
func ToSlash(path string) string
功能:将path中平台相关的路径分隔符转换成'/'
例如:windows当前路径: D:\gopro\src\study,转换之后D:/gopro/src/study
2. 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是分隔符后面的部分不包含分隔符
6. Ext函数
func Ext(path string) string
功能:获取路径字符串中的文件扩展名
例如:
fmt.Println(“D:/gopro/src/aaa.txt”)
//如果该文件存在则会输出: .txt
7.Rel函数
func Rel(basepath, targpath string) (string, error)
功能:
获取targpath相对于basepath的路径
要求targpaht和basepath必须"都是相对路径"或都是"绝对路径"
例如:
package main import ( "fmt" "path/filepath" ) func main() { // 都是绝对路径 s, err := filepath.Rel(`/a/b/c`, `/a/b/c/d/e`) fmt.Println(s, err) // d/e <nil> // 都是相对路径 s, err = filepath.Rel(`a/b/c`, `a/b/c/d/e`) fmt.Println(s, err) // d/e <nil> // 一个绝对一个相对 s, err = filepath.Rel(`/a/b/c`, `a/b/c/d/e`) fmt.Println(s, err) // Rel: can't make a/b/c/d/e relative to /a/b/c // 一个相对一个绝对 s, err = filepath.Rel(`a/b/c`, `/a/b/c/d/e`) fmt.Println(s, err) // Rel: can't make /a/b/c/d/e relative to a/b/c // 从 `a/b/c` 进入 `a/b/d/e`,只需要进入 `../d/e` 即可 s, err = filepath.Rel(`a/b/c`, `a/b/d/e`) fmt.Println(s, err) // ../d/e <nil> }
8.Join函数
func Join(elem ...string) string
功能:将elem中的多个元素合并成一个路径,忽略空元素,清理多余字符
9.Clean函数
func Clean(path string) string
功能:
清除path中多余的字符
规则如下:
1.如果有多个分隔符,则只留一个
2.消除每一个.(当前路径)路径名
3.消除每一个..(父目录)路径名,以及它之前的非..元素
2和3使用于linux系统
10. IsAbs函数
func IsAbs(path string) (b bool)
功能:判断该路径是否是绝对路径
11. Abs函数
func Abs(path string) (string, error)
功能:获取path的绝对路径
示例:
fmt.Println(filepath.Abs("b/c")) //返回结果:D:\gopro\src\study\b\c <nil>
12. SplitList函数
func SplitList(path string) []string
功能:按os.PathListSeparator即(;)将路径进行分割
13. VolumeName函数
func VolumeName(path string) string
功能:
返回路径字符串中的卷名
如Windows 中的 `C:\Windows` 会返回 "C:"
14. EvalSymlinks函数
func EvalSymlinks(path string) (string, error)
功能:返回链接(快捷方式)所指向的实际文件
15.Match函数
func Match(pattern, name string) (matched bool, err error)
功能:
根据pattern来判断name是否匹配,如果匹配则返回true
pattern 规则如下:
可以使用 "htmlcode">
package main import ( "os" "fmt" "path/filepath" ) func main() { pwd,_ := os.Getwd() fmt.Println(filepath.Glob(pwd+"/")) }
以上示例是列出当前文件夹下 名字为3个字符的文件或目录
17.Walk函数
func Walk(root string, walkFn WalkFunc) error
功能:遍历指定目录(包括子目录),对遍历的项目用walkFn函数进行处理
walkFn函数如下:
type WalkFunc func(path string, info os.FileInfo, err error) error
path为当前文件或目录的路径,info为文件描述信息
规则如下:
文件处理函数定义如下,如果 WalkFunc 返回 nil,则 Walk 函数继续遍历,如果返回 SkipDir,则 Walk 函数会跳过当前目录(如果当前遍历到的是文件,则同时跳过后续文件及子目录),继续遍历下一个目录。如果返回其它错误,则 Walk 函数会中止遍历。在 Walk 遍历过程中,如果遇到错误,则会将错误通过 err 传递给WalkFunc 函数,同时 Walk 会跳过出错的项目,继续处理后续项目。
示例:
package main import ( "os" "fmt" "path/filepath" ) func main() { 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 }) }
以上示例是遍历当前文件夹下名字为3个字符的文件或目录及info信息,及满足条件目录下的子文件或子目录。
path目录下的相关函数
1. Join函数
func Join(elem ...string) string
功能:将多个path进行连接
2. Match函数
func Match(pattern, name string) (matched bool, err error)
功能:根据pattern进行匹配
3. IsAbs函数
func IsAbs(path string) bool
功能:是否是绝对路径,判断是否是以'/'结尾,不适用windows
4.Clean函数
func Clean(path string) string
功能:清除path中多余的字符
5.Ext函数
func Ext(path string) string
功能:获取文件后缀名
6.Split函数
func Split(path string) (dir, file string)
功能:获取path中最后一个分隔符前后的两部分,分隔符前面的部分包含分隔符,后面的不包含分割符
7. Base函数
func Base(path string) string
功能:获取path中最后一个分隔符之后的部分(不包含分隔符)
8.Dir函数
func Dir(path string) string
功能:获取path的目录,最后一个分隔符前面的内容
补充:golang中io/ioutil.readdir和path/filepath.walk遍历获取目录下文件性能比较
在使用golang进行开发,获取当前目录下文件或文件列表时候有两种库方法可以供使用。但是那种性能好,在网上没有找到详细的描述,因此自己写了两个函数,进行了下比较。最终发现ioutil的效率要高很高。
具体执行效果,获取一个D盘目录下总共340个文件,比较两个函数耗时明显发现 ioutil的效率要高很多:
下面就贴出源代码,大家在这块有更高效的处理,欢迎讨论:
package main import ( "fmt" "io/ioutil" "os" "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 main(){ s:=[]string{} n:=[]string{} pathname:="D://go_copysrc" fmt.Printf("filepath walk cost time returned \n") n = GetALLFIles_walk(pathname) fmt.Println("the number of file is %v,content is:%v",len(n),n) 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) }
以上为个人经验,希望能给大家一个参考,也希望大家多多支持。如有错误或未考虑完全的地方,望不吝赐教。
免责声明:本站资源来自互联网收集,仅供用于学习和交流,请遵循相关法律法规,本站一切资源不代表本站立场,如有侵权、后门、不妥请联系本站删除!
RTX 5090要首发 性能要翻倍!三星展示GDDR7显存
三星在GTC上展示了专为下一代游戏GPU设计的GDDR7内存。
首次推出的GDDR7内存模块密度为16GB,每个模块容量为2GB。其速度预设为32 Gbps(PAM3),但也可以降至28 Gbps,以提高产量和初始阶段的整体性能和成本效益。
据三星表示,GDDR7内存的能效将提高20%,同时工作电压仅为1.1V,低于标准的1.2V。通过采用更新的封装材料和优化的电路设计,使得在高速运行时的发热量降低,GDDR7的热阻比GDDR6降低了70%。
更新日志
- 凤飞飞《我们的主题曲》飞跃制作[正版原抓WAV+CUE]
- 刘嘉亮《亮情歌2》[WAV+CUE][1G]
- 红馆40·谭咏麟《歌者恋歌浓情30年演唱会》3CD[低速原抓WAV+CUE][1.8G]
- 刘纬武《睡眠宝宝竖琴童谣 吉卜力工作室 白噪音安抚》[320K/MP3][193.25MB]
- 【轻音乐】曼托凡尼乐团《精选辑》2CD.1998[FLAC+CUE整轨]
- 邝美云《心中有爱》1989年香港DMIJP版1MTO东芝首版[WAV+CUE]
- 群星《情叹-发烧女声DSD》天籁女声发烧碟[WAV+CUE]
- 刘纬武《睡眠宝宝竖琴童谣 吉卜力工作室 白噪音安抚》[FLAC/分轨][748.03MB]
- 理想混蛋《Origin Sessions》[320K/MP3][37.47MB]
- 公馆青少年《我其实一点都不酷》[320K/MP3][78.78MB]
- 群星《情叹-发烧男声DSD》最值得珍藏的完美男声[WAV+CUE]
- 群星《国韵飘香·贵妃醉酒HQCD黑胶王》2CD[WAV]
- 卫兰《DAUGHTER》【低速原抓WAV+CUE】
- 公馆青少年《我其实一点都不酷》[FLAC/分轨][398.22MB]
- ZWEI《迟暮的花 (Explicit)》[320K/MP3][57.16MB]