目录
os介绍
- os 包提供了不依赖平台的操作系统函数接口。错误处理设计为go 风格,失败的调用会返回错误值而非错误码。通常错误值里包含更多信息
1. os基础操作
// 获取文件信息,可以用来判断文件或目录是否存在,获取文件大小
os.Stat()
func Stat(name string) (FileInfo, error) // Stat返回描述文件f的FileInfo类型值。如果出错,错误底层类型是*PathError
// 返回一个布尔值说明该错误是否表示一个文件或目录不存在
os.IsNotExist()
golang判断文件或文件夹是否存在的方法为使用os.Stat()函数返回的错误值进行判断:
如果返回的错误为nil,说明文件或文件夹存在
如果返回的错误类型使用os.IsNotExist()判断为true,说明文件或文件夹不存在
如果返回的错误为其它类型,则不确定是否在存在
//获取主机名
os.Hostname()
//获取当前目录
os.Getwd()
//获取用户ID
os.Getuid()
//获取有效用户ID
os.Geteuid()
//获取组ID
os.Getgid()
//获取有效组ID
os.Getegid()
//获取进程ID
os.Getpid()
//获取父进程ID
os.Getppid()
//获取环境变量的值
os.Getenv("GOPATH")
//设置环境变量的值
os.Setenv("NAME", "lqz")
//清除所有环境变量(慎用)
os.Clearenv()
//改变当前工作目录
os.Chdir("/Users/liuqingzheng")
package main
import (
"fmt"
"os"
)
func main() {
//获取主机名
fmt.Println(os.Hostname())
//获取当前目录
fmt.Println(os.Getwd())
//获取用户ID
fmt.Println(os.Getuid())
//获取有效用户ID
fmt.Println(os.Geteuid())
//获取组ID
fmt.Println(os.Getgid())
//获取有效组ID
fmt.Println(os.Getegid())
//获取进程ID
fmt.Println(os.Getpid())
//获取父进程ID
fmt.Println(os.Getppid())
//获取环境变量的值
fmt.Println(os.Getenv("GOPATH"))
//设置环境变量的值
os.Setenv("NAME", "lqz")
//清除所有环境变量(慎用)
//os.Clearenv()
//改变当前工作目录
os.Chdir("/Users/liuqingzheng")
fmt.Println(os.Getwd())
}
2. os文件及目录相关
// 获取文件大小
func getFileSize(filename string) (int64, error) {
fileInfo, err := os.Stat(filename)
if err != nil {
return 0, err
}
return fileInfo.Size(), nil
}
// 判断文件或目录是否存在
func PathExists(path string) (bool, error) {
_, err := os.Stat(path)
if err == nil {
return true, nil
}
if os.IsNotExist(err) {
return false, nil
}
return false, err
}
func main() {
//创建目录
os.Mkdir("abc", os.ModePerm) // 0777
//创建多级目录
os.MkdirAll("xxxx/x", os.ModePerm)
//删除文件或目录
os.Remove("xxx/x")
//删除指定目录下所有文件
os.RemoveAll("xxxxx")
//重命名文件
os.Rename("./test1.txt", "./twst1_new.txt")
// 获取文件信息-->FileInfo接口类型,有很多方法,如文件大小,是否是文件夹等等
info,_:=os.Stat("./lqz")
fmt.Println(info.Size())
//创建文件
f1, _ := os.Create("./test.txt")
defer f1.Close()
//修改文件权限
os.Chmod("./test.txt", 0777)
////修改文件所有者
os.Chown("./test.txt", 0, 0)
//修改文件的访问时间和修改时间
os.Chtimes("./test.txt", time.Now().Add(time.Hour), time.Now().Add(time.Hour))
//打开文件
//func OpenFile(name string, flag int, perm FileMode) (file *File, err error)
//以读写方式打开文件,如果不存在,则创建
file, err := os.OpenFile("./test2.txt", os.O_RDWR|os.O_CREATE, 0766)
}
//*********flag 取值*********
const (
O_RDONLY int = syscall.O_RDONLY // 只读模式打开文件
O_WRONLY int = syscall.O_WRONLY // 只写模式打开文件
O_RDWR int = syscall.O_RDWR // 读写模式打开文件
O_APPEND int = syscall.O_APPEND // 写操作时将数据附加到文件尾部
O_CREATE int = syscall.O_CREAT // 如果不存在将创建一个新文件
O_EXCL int = syscall.O_EXCL // 和O_CREATE配合使用,文件必须不存在
O_SYNC int = syscall.O_SYNC // 打开文件用于同步I/O
O_TRUNC int = syscall.O_TRUNC // 如果可能,打开时清空文件
)
//*********fFileMode取值*********f
const (
// 单字符是被String方法用于格式化的属性缩写。
ModeDir FileMode = 1 << (32 - 1 - iota) // d: 目录
ModeAppend // a: 只能写入,且只能写入到末尾
ModeExclusive // l: 用于执行
ModeTemporary // T: 临时文件(非备份文件)
ModeSymlink // L: 符号链接(不是快捷方式文件)
ModeDevice // D: 设备
ModeNamedPipe // p: 命名管道(FIFO)
ModeSocket // S: Unix域socket
ModeSetuid // u: 表示文件具有其创建者用户id权限
ModeSetgid // g: 表示文件具有其创建者组id的权限
ModeCharDevice // c: 字符设备,需已设置ModeDevice
ModeSticky // t: 只有root/创建者能删除/移动文件
// 覆盖所有类型位(用于通过&获取类型位),对普通文件,所有这些位都不应被设置
ModeType = ModeDir | ModeSymlink | ModeNamedPipe | ModeSocket | ModeDevice
ModePerm FileMode = 0777 // 覆盖所有Unix权限位(用于通过&获取类型位)
)
3. 其他
func main() {
// Environ返回表示环境变量的格式为”key=value”的字符串的切片拷贝
fmt.Println(os.Environ())
// Exit让当前程序以给出的状态码code退出。一般来说,状态码0表示成功,非0表示出错。程序会立刻终止,defer的函数不会被执行
os.Exit(0) //0为正常退出,其他数值(1-127)为不正常 2表示用法不当(Incorrect Usage) 127表示命令没有找到(Command Not Found) 126表示不是可执行的(Not an executable)
// 返回一个用于保管临时文件的默认目录
fmt.Println(os.TempDir())
//Args保管了命令行参数,第一个是程序名
fmt.Println(os.Args) // 执行 go run xx.go lqz
}
标签:文件,获取,fmt,标准,Println,os,ID
From: https://www.cnblogs.com/Mcoming/p/18073083