golang中文件以及文件夹路径相关操作

获取目录中所有文件
使用包:
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()
}

posted @ 2018-10-22 16:53  craneboos  阅读(1225)  评论(0编辑  收藏  举报