分享
  1. 首页
  2. 文章

Go实战--golang中文件以及文件夹路径相关操作

wangshubo1989 · · 12684 次点击 · · 开始浏览
这是一个创建于 的文章,其中的信息可能已经有所发展或是发生改变。

生命不止,继续 go go go!!!

之前介绍过golang的标准库:path/filepath, os

Go语言学习之path/filepath包(the way to go)

Go语言学习之os包中文件相关的操作(The way to go)

今天就跟大家分享几个关于文件以及文件夹的相关操作。

获取目录中所有文件

使用包:
io/ioutil

使用方法:
ioutil.ReadDir
读取目录 dirmane 中的所有目录和文件(不包括子目录)
返回读取到的文件的信息列表和读取过程中遇到的任何错误
返回的文件列表是经过排序的

FileInfo

type FileInfo interface {
 Name() string // base name of the file
 Size() int64 // length in bytes for regular files; system-dependent for others
 Mode() FileMode // file mode bits
 ModTime() time.Time // modification time
 IsDir() bool // abbreviation for Mode().IsDir()
 Sys() interface{} // underlying data source (can return nil)
}

代码:

package main
import (
 "fmt"
 "io/ioutil"
)
func main() {
 myfolder := `d:\go_workspace\`
 files, _ := ioutil.ReadDir(myfolder)
 for _, file := range files {
 if file.IsDir() {
 continue
 } else {
 fmt.Println(file.Name())
 }
 }
}

获取目录以及子目录中所有文件

在上面代码的基础上,使用递归,遍历所有的文件夹和子文件夹。

代码:

package main
import (
 "fmt"
 "io/ioutil"
)
func main() {
 myfolder := `d:\go_workspace\`
 listFile(myfolder)
}
func listFile(myfolder string) {
 files, _ := ioutil.ReadDir(myfolder)
 for _, file := range files {
 if file.IsDir() {
 listFile(myfolder + "/" + file.Name())
 } else {
 fmt.Println(myfolder + "/" + file.Name())
 }
 }
}

获取执行文件所在目录

代码1:
使用包:
path/filepath
os

package main
import (
 "fmt"
 "log"
 "os"
 "path/filepath"
)
func main() {
 dir, err := filepath.Abs(filepath.Dir(os.Args[0]))
 if err != nil {
 log.Fatal(err)
 }
 fmt.Println(dir)
}

代码2:
使用包:
path/filepath
os

package main
import (
 "fmt"
 "os"
 "path/filepath"
)
func main() {
 ex, err := os.Executable()
 if err != nil {
 panic(err)
 }
 exPath := filepath.Dir(ex)
 fmt.Println(exPath)
}

代码3:
使用包:
os

package main
import (
 "fmt"
 "os"
)
func main() {
 pwd, err := os.Getwd()
 if err != nil {
 fmt.Println(err)
 os.Exit(1)
 }
 fmt.Println(pwd)
}

代码4:
使用包:
path/filepath

package main
import (
 "fmt"
 "path/filepath"
)
func main() {
 fmt.Println(filepath.Abs("./"))
}

代码5:
第三方库:https://github.com/kardianos/osext

package main
import (
 "fmt"
 "log"
 "github.com/kardianos/osext"
)
func main() {
 folderPath, err := osext.ExecutableFolder()
 if err != nil {
 log.Fatal(err)
 }
 fmt.Println(folderPath)
}

显示所有文件夹、子文件夹、文件、子文件

使用包:
path/filepath
os

package main
import (
 "fmt"
 "os"
 "path/filepath"
)
func visit(path string, f os.FileInfo, err error) error {
 fmt.Printf("Visited: %s\n", path)
 return nil
}
func main() {
 root := `d:\go_workspace\`
 err := filepath.Walk(root, visit)
 fmt.Printf("filepath.Walk() returned %v\n", err)
}

获取文件夹中所有文件以及文件的大小

使用包:
path/filepath
os

package main
import (
 "fmt"
 "os"
 "path/filepath"
)
func main() {
 dirname := "." + string(filepath.Separator)
 d, err := os.Open(dirname)
 if err != nil {
 fmt.Println(err)
 os.Exit(1)
 }
 defer d.Close()
 fi, err := d.Readdir(-1)
 if err != nil {
 fmt.Println(err)
 os.Exit(1)
 }
 for _, fi := range fi {
 if fi.Mode().IsRegular() {
 fmt.Println(fi.Name(), fi.Size(), "bytes")
 }
 }
}

重命名文件

package main
import (
 "log"
 "os"
)
func main() {
 originalPath := "./test.txt"
 newPath := "test_new.txt"
 err := os.Rename(originalPath, newPath)
 if err != nil {
 log.Fatal(err)
 }
}

重命名文件夹

package main
import (
 "log"
 "os"
)
func main() {
 originalPath := "test"
 newPath := "test_new"
 err := os.Rename(originalPath, newPath)
 if err != nil {
 log.Fatal(err)
 }
}

判断某个文件是否存在

package main
import (
 "fmt"
 "os"
)
func main() {
 originalPath := "test.txt"
 result := Exists(originalPath)
 fmt.Println(result)
}
func Exists(name string) bool {
 if _, err := os.Stat(name); err != nil {
 if os.IsNotExist(err) {
 return false
 }
 }
 return true
}

判断某个文件的读写权限

package main
import (
 "log"
 "os"
)
func main() {
 //Write permission
 file, err := os.OpenFile("./test.txt", os.O_WRONLY, 0666)
 if err != nil {
 if os.IsPermission(err) {
 log.Println("Error: Write permission denied.")
 }
 }
 file.Close()
 //Read permission
 file, err = os.OpenFile("./test.txt", os.O_RDONLY, 0666)
 if err != nil {
 if os.IsPermission(err) {
 log.Println("Error: Read permission denied.")
 }
 }
 file.Close()
}

这里写图片描述


有疑问加站长微信联系(非本文作者)

本文来自:CSDN博客

感谢作者:wangshubo1989

查看原文:Go实战--golang中文件以及文件夹路径相关操作

入群交流(和以上内容无关):加入Go大咖交流群,或添加微信:liuxiaoyan-s 备注:入群;或加QQ群:692541889

关注微信
12684 次点击
被以下专栏收入,发现更多相似内容
暂无回复
添加一条新回复 (您需要 后才能回复 没有账号 ?)
  • 请尽量让自己的回复能够对别人有帮助
  • 支持 Markdown 格式, **粗体**、~~删除线~~、`单行代码`
  • 支持 @ 本站用户;支持表情(输入 : 提示),见 Emoji cheat sheet
  • 图片支持拖拽、截图粘贴等方式上传

用户登录

没有账号?注册
(追記) (追記ここまで)

今日阅读排行

    加载中
(追記) (追記ここまで)

一周阅读排行

    加载中

关注我

  • 扫码关注领全套学习资料 关注微信公众号
  • 加入 QQ 群:
    • 192706294(已满)
    • 731990104(已满)
    • 798786647(已满)
    • 729884609(已满)
    • 977810755(已满)
    • 815126783(已满)
    • 812540095(已满)
    • 1006366459(已满)
    • 692541889

  • 关注微信公众号
  • 加入微信群:liuxiaoyan-s,备注入群
  • 也欢迎加入知识星球 Go粉丝们(免费)

给该专栏投稿 写篇新文章

每篇文章有总共有 5 次投稿机会

收入到我管理的专栏 新建专栏