golang --os system package

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 
 
 

Guess you like

Origin www.cnblogs.com/saryli/p/11691135.html