Environment Variables
获取所有环境变量, 返回变量列表
func Environ() []string
package main import ( "fmt" "os" "strings" ) func main() { envs: os.environ = () for _, env := range envs { cache := strings.Split(env, "=") fmt.Printf(` key: %s value: %s `Hides [0], cover [1]) } }
获取指定环境变量
func Getenv(key string) string
package main import ( "fmt" "os" ) func main() { fmt.Println(os.Getenv("GOPATH")) }
设置环境变量
func Setenv(key, value string) error
package main import ( "fmt" "os" ) func main() { fmt.Println(os.Getenv("GOPATH")) if err := os.Setenv("GOPATH", "./GO/bin"); err != nil { fmt.Println(err) } else { fmt.Println("success") } }
清除所有环境变量
os.Clearenv()
File Mode
const ( // single character is an attribute abbreviations are used to format the String method. ModeDir FileMode = 1 << (32 - 1 - iota) // d: Directory ModeAppend // a: only write, and can only be written to the end ModeExclusive // l: for execution ModeTemporary // T: Temporary files (non-backup file) ModeSymlink // L: symbolic link (not a shortcut file) ModeDevice // D: Equipment ModeNamedPipe // p: named pipe (FIFO) ModeSocket // S: Unix 域 socket ModeSetuid // u: represents a file with its creator user id rights ModeSetgid // g: indicates that the file has permission of its creator's group id ModeCharDevice // c: character device, to be set ModeDevice ModeSticky // t: only root / creator can delete / move files // to cover all types of bits (for bit by & fetch type), an ordinary file, not all of these bits shall be set Fashion Type = ModeDir | ModeSymlink | ModeNamedPipe | ModeSocket | fashion Device ModePerm FileMode = 0777 // Unix permissions to cover all bits (for bit by & acquiring type) )
File information
type FileInfo interface { Name () string // name of the file (without extension) Size () int64 // return value indicates a normal file size; Return Value Meaning other files different for each system Mode () mode bit FileMode // file Modified ModTime () time.Time // file IsDir () bool // equivalent to the Mode (). IsDir () Sys () interface {} // underlying data sources (which may return nil) }
获取文件信息对象, 符号链接将跳转
func Stat(name string) (fi FileInfo, err error)
fi, _ := os.Stat("./cache.js") fmt.Println(fi.Size())
获取文件信息对象, 符号链接不跳转
package main import ( "fmt" "os" ) func main() { fi, _ := os.Lstat("./main.go") fmt.Println(fi.Size()) }
根据错误,判断 文件或目录是否存在
package main import ( "fmt" "os" ) func main() { if _, err := os.Open("./empty.js"); err != nil { // false true existence does not exist emptyErr := os.IsExist(err) fmt.Println(emptyErr, "\n", err) } }
IsExist 反义方法
package main import ( "fmt" "os" ) func main() { if _, err := os.Open("./empty.js"); err != nil { // false true existence does not exist emptyErr := os.IsNotExist(err) fmt.Println(emptyErr, "\n", err) } }
根据错误,判断是否为权限错误
package main import ( "fmt" "os" ) func main() { file, _ := os.Open("cache.js") _, err := file.WriteString("// new info") if err != nil { fmt.Println (os.IsPermission (err)) } defer file.Close() }
File / directory operations
Property operations
获取当前工作目录
func Getwd() (dir string, err error)
package main import ( "fmt" "os" ) func main() { path, _: = os.Getwd () fmt.Println(path) }
修改当前,工作目录
func Chdir(dir string) error
package main import ( "fmt" "os" ) func main() { path1, _: = os.Getwd () fmt.Println(path1) os.Chdir("./../") path, _: = os.Getwd () fmt.Println(path) }
修改文件的 FileMode
func Chmod(name string, mode FileMode) error
修改文件的 访问时间和修改时间
func Chtimes(name string, atime time.Time, mtime time.Time) error
package main import ( "fmt" "os" "time" ) func main() { fmt.Println (os.Getwd ()) path := "test.txt" os.Chtimes(path, time.Now(), time.Now()) as _: = os.Stat (path) fmt.Println (fi.ModTime ()) }
CRUD
创建目录
func Mkdir(name string, perm FileMode) error
package main import ( "fmt" "os" ) func main() { if err := os.Mkdir("test", os.ModeDir); err != nil { fmt.Println(err) } else { fmt.Println("success") } }
递归创建目录
func MkdirAll(path string, perm FileMode) error
package main import ( "fmt" "os" ) func main() { if err := os.MkdirAll("test01/test", os.ModeDir); err != nil { fmt.Println(err) } else { fmt.Println("success") } }
移除文件或目录(单一文件)
func Remove(name string) error
package main import ( "fmt" "os" ) func main() { if err := os.Remove("test"); err != nil { fmt.Println(err) } else { fmt.Println("success") } }
递归删除文件或目录
func RemoveAll(path string) error
package main import ( "fmt" "os" ) func main() { if err := os.RemoveAll("test01"); err != nil { fmt.Println(err) } else { fmt.Println("success") } }
文件重名或移动
func Rename(oldpath, newpath string) error
package main import ( "fmt" "os" ) func main() { // heavy naming err := os.Rename("test.txt", "test01.js") if err != nil { fmt.Println(err) } err = os.Mkdir("test", os.ModeDir) if err != nil { fmt.Println(err) } // move err = os.Rename("test01.js", "test/text01.txt") if err != nil { fmt.Println(err) } }
修改文件大小
func Truncate(name string, size int64) error
package main import ( "fmt" "os" ) func main() { path := "test/text01.txt" fi, err: = os.Stat (path) if err != nil { fmt.Println(err) os.Exit (1) } size := fi.Size() fmt.Println(size) // length taken size = int64(float64(size) * 0.5) os.Truncate(path, size) as _ = os.Stat (path) fmt.Println(fi.Size()) }
// 注意: 长度小于原文件时,文件内容将被截取 // 长度大于原文件时,超出部分将被无效字符填充
比较两个文件信息对象,是否指向同一文件
func SameFile(fi1, fi2 FileInfo) bool
package main import ( "fmt" "os" ) func main() { path := "test/text01.txt" fi_1, _ = os.Stat (path) fi_2, _ = os.Stat (path) fmt.Println (os.SameFile (fi_1, fi_2)) }
File / directory object
Open the file / directory
创建文件, 如果文件存在,清空原文件
func Create(name string) (file *File, err error)
import ( "fmt" "os" ) func main() { file, _ := os.Create("./new_file.js") fmt.Println(file.Name()) }
打开文件,获取文件对象, 以读取模式打开
Open to open a file for reading. If successful, the method returns a file object can be used to read data; corresponding file descriptors O_RDONLY mode. If an error occurs, the error underlying type is * PathError.
So, Open () can only be used to read files.
func Open(name string) (file *File, err error)
package main import ( "fmt" "os" ) func main() { file, _ := os.Open("./new_file.js") fmt.Println(file.Name()) }
以指定模式,打开文件
func OpenFile(name string, flag int, perm FileMode) (file *File, err error)
package main import ( "fmt" "os" ) func main() { file, _ := os.OpenFile("./new_file.js", os.O_RDONLY, os.ModeAppend) fmt.Println(file.Name()) }
File object attribute manipulation
获取文件路径
func (f *File) Name() string
获取文件信息对象
func (f *File) Stat() (fi FileInfo, err error)
将当前工作路径修改为文件对象目录, 文件对象必须为目录, 该接口不支持window
func (f *File) Chdir() error
修改文件模式
func (f *File) Chmod(mode FileMode) error
修改文件对象size
func (f *File) Truncate(size int64) error
Object file read and write operations
读取文件内容, 读入长度取决 容器切片长度
func (f *File) Read(b []byte) (n int, err error)
package main import ( "fmt" "os" ) func main() { bt := make([]byte, 10) file, _ := os.Open("./new_file.js") file.Read(bt) defer file.Close() fmt.Println(string(bt)) }
从某位置,读取文件内容
func (f *File) ReadAt(b []byte, off int64) (n int, err error)
package main import ( "fmt" "os" ) func main() { bt := make([]byte, 100) file, _ := os.Open("test/text01.txt") file.ReadAt(bt, 2) fmt.Println(string(bt)) }
写入内容
func (f *File) Write(b []byte) (n int, err error)
package main import ( "fmt" "os" ) func main() { file, err := os.OpenFile("test/text01.txt", os.O_RDWR, os.ModeAppend) if err != nil { fmt.Println("err: ", err) os.Exit (1) } defer file.Close() if n, err := file.Write([]byte("// new info")); err != nil { fmt.Println(err) } else { fmt.Println(n) } }
写入字符
func (f *File) WriteString(s string) (ret int, err error)
package main import ( "fmt" "os" ) func main() { file, err := os.OpenFile("test/text01.txt", os.O_RDWR, os.ModeAppend) if err != nil { fmt.Println("err: ", err) os.Exit (1) } defer file.Close() if n, err := file.WriteString("// test info"); err != nil { fmt.Println(err) } else { fmt.Println(n) } }
从指定位置,写入
func (f *File) WriteAt(b []byte, off int64) (n int, err error)
package main import ( "fmt" "os" ) func main() { file, err := os.OpenFile("test/text01.txt", os.O_RDWR, os.ModeAppend) if err != nil { fmt.Println("err: ", err) os.Exit (1) } defer file.Close() if n, err := file.WriteAt([]byte(" append "), 5); err != nil { fmt.Println(err) } else { fmt.Println(n) } }
设置下次读写位置
func (f *File) Seek(offset int64, whence int) (ret int64, err error)
package main import ( "fmt" "os" ) func main() { f, err := os.OpenFile("test/text01.txt", os.O_RDWR, os.ModeAppend) if err != nil { fmt.Println("err: ", err) os.Exit (1) } defer f.Close() f.Seek(2, 0) buffer := make([]byte, 5) // Read the file pointer will be offset n, err := f.Read(buffer) if err != nil { fmt.Println(nil) return } fmt.Printf("n is %d, buffer content is : %s\n", n, buffer) // Get the current position of the file pointer cur_offset, _ := f.Seek(0, os.SEEK_CUR) fmt.Printf("current offset is %d\n", cur_offset) }
关闭文件
func (f *File) Close() error