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()
}
golang中文件以及文件夹路径相关操作的更多相关文章
- python文件、文件夹的相关操作
		python文件.文件夹的相关操作 #1.rename()可以完成对文件的重命名 #rename(需要修改的文件名,新的文件名) import os os.rename("readme.tx ... 
- Golang中如何正确的使用sarama包操作Kafka?
		Golang中如何正确的使用sarama包操作Kafka? 一.背景 在一些业务系统中,模块之间通过引入Kafka解藕,拿IM举例(图来源): 用户A给B发送消息,msg_gateway收到消息后,投 ... 
- 浅谈python中文件和文件夹的相关操作
		文件操作 文件的打开与关闭 打开文件 使用open(文件名,访问方式)函数,可以打开一个已存在的文件,或者创建一个新的文件. 示例如下: f = open('test.txt') # 访问方式可以省略 ... 
- python3 文件及文件夹路径相关
		1. #返回当前文件所在的目录 currentDir = path.dirname(__file__) # __file__ 为当前文件 2.获得某个路径的父级目录: parent_path = os ... 
- python - os.path,路径相关操作
		python处理系统路径的相关操作: # -*- coding: utf-8 -*- import os # 属性 print '__file__: %s' % __file__ # 绝对路径(包含文 ... 
- golang中如何判断文件是否有可执行权限
		本文介绍在Go语言如何检查文件的权限.以检查文件可执行权限为例. 在文件系统中,文件的属性使用uint32表示. 例如 -rwxrwxrwx 判断可执行权限,也就是检查文件mode是否有: --x-- ... 
- Pandas之csv文件对列行的相关操作
		1.Pandas对数据某一列删除 1.删除列 import pandas as pd df = pd.read_csv(file) #axis=1就是删除列 df.drop(['列名1','列名2'] ... 
- WebView中的视频全屏的相关操作
		近期工作中,基本一直在用WebView,今天就把它整理下: WebView 顾名思义,就是放一个网页,一个看起来十分简单,可是用起来不是那么简单的控件. 首先你肯定要定义,初始化一个webview,事 ... 
- python路径相关操作
		#获取当前文件所在目录filedir = __file__ print os.path.dirname(filedir) #获取文件名print os.path.basename(filedir) 
随机推荐
- ppt调整三级标题的位置
			---恢复内容开始--- 标题格式:一级标题 中文数字加.例如 一. 二级标题 中文数字加: 例如二: 三级标题 小写数字加. 例如3. 使用方法: 打开PPT 按alt+f11,打开 ... 
- nlopt  二次优化
			/* * main.c * * Created on: Oct 9, 2018 * Author: lgh */ #include <stdio.h> #include <math. ... 
- Python中的内存管理机制
			Python是如何进行内存管理的 python引用了一个内存池(memory pool)机制,即pymalloc机制,用于管理对小块内存的申请和释放 1.介绍 python和其他高级语言一样,会进行自 ... 
- Node中的net模块提供的前端通信
			Node中的net模块提供的前端通信 客户端 业务: 客户端现在要在终端输入内容,然后回车发送内容给服务器 解决: Node中提供了一个叫做 readline 的 模块用于读取命令行内容 [ 单行读取 ... 
- linux命令安装docker
			安装: 1.Docker要求CentOS系统的内核版本高于 3.10 ,通过 uname -r 命令查看你当前的内核版本是否支持安账docker 2.更新yum包:sudo yum update 3. ... 
- char str = '1.2.';问题
			偶然看到群里老哥问道这个问题 #include <iostream> using namespace std; int main() { char str = '1.2.'; ; } 什么 ... 
- Oracle 数据 查询  一对多 取最新一条非 0 数据
			主键id 待查字段 日期 1 6 2019/5/1 1 0 2019/5/2 需求: 找出 ... 
- MySQL操作规范总结
			来源:静以致远√团团 用户权限管理创建用户命令:CREATE USER 'username'@'host' IDENTIFIED BY 'password';说明:Username所创建的用户名hos ... 
- 从win到多系统
			相信有不少电脑爱好者喜欢折腾系统,尤其还是一个小白(感觉多系统强的不要不要的,各种崇拜),然后就走上了深渊. 首先,我一开始也是个win系统的忠实用户,没用过其他系统的我几乎不知道其他系统的存在,反正 ... 
- mongodb文件
			https://github.com/mongodb/mongo/tree/master 或 https://www.mongodb.com/download-center?jmp=nav#comm ... 
