zoukankan      html  css  js  c++  java
  • golang --os系统包

    环境变量

    获取所有环境变量, 返回变量列表

    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 
    		`, cache[0], cache[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()
    

      

    文件模式

    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权限位(用于通过&获取类型位)
    )
    

      

    文件信息

    type FileInfo interface {
        Name() string       // 文件的名字(不含扩展名)
        Size() int64        // 普通文件返回值表示其大小;其他文件的返回值含义各系统不同
        Mode() FileMode     // 文件的模式位
        ModTime() time.Time // 文件的修改时间
        IsDir() bool        // 等价于Mode().IsDir()
        Sys() interface{}   // 底层数据来源(可以返回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 存在
    		emptyErr := os.IsExist(err)
    		fmt.Println(emptyErr, "
    ", err)
    	}
    }
    

      

    IsExist 反义方法

    package main
    
    import (
    	"fmt"
    	"os"
    )
    
    func main() {
    	if _, err := os.Open("./empty.js"); err != nil {
    		// false 不存在   true 存在
    		emptyErr := os.IsNotExist(err)
    		fmt.Println(emptyErr, "
    ", 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()
    }
    

      

    文件/目录操作

    属性操作

    获取当前工作目录

    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())
    
    	fi, _ := os.Stat(path)
    	fmt.Println(fi.ModTime())
    
    }
    

      

    增删改查

    创建目录

    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() {
    
    	// 重命名
    	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)
    	}
    
    	// 移动
    	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)
    
    	// 截取长度
    	size = int64(float64(size) * 0.5)
    
    	os.Truncate(path, size)
    
    	fi, _ = 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))
    }
    

      

    文件/目录对象

    打开文件/目录

    创建文件, 如果文件存在,清空原文件

    func Create(name string) (file *File, err error)
    
    import (
    	"fmt"
    	"os"
    )
    
    func main() {
    
    	file, _ := os.Create("./new_file.js")
    	fmt.Println(file.Name())
    }
    

      

    打开文件,获取文件对象, 以读取模式打开

    Open打开一个文件用于读取。如果操作成功,返回的文件对象的方法可用于读取数据;对应的文件描述符具有O_RDONLY模式。如果出错,错误底层类型是*PathError。 
    所以,Open()只能用于读取文件。

    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())
    }
    

      

    文件对象属性操纵

    获取文件路径

    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
    

    文件对象读写操作

    读取文件内容, 读入长度取决 容器切片长度

    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 后文件指针也会偏移
    
    	n, err := f.Read(buffer)
    	if err != nil {
    		fmt.Println(nil)
    		return
    	}
    	fmt.Printf("n is %d, buffer content is : %s
    ", n, buffer)
    	// 获取文件指针当前位置
    	cur_offset, _ := f.Seek(0, os.SEEK_CUR)
    	fmt.Printf("current offset is %d
    ", cur_offset)
    
    }
    

      

    关闭文件

    func (f *File) Close() error
    
     
     
  • 相关阅读:
    circle loss:统一softmax CrossEntropy loss 和 triplet loss / 2020
    针对PPO的一些Code-level性能优化技巧
    【李南江】从零玩转TypeScript
    Python编程题16--最长不重复子串
    Python编程题15--RGB字符串排序
    Maven教程
    python的pandas处理txt文件
    python将JPG图片转换为PDF
    使用svd对信号矩阵降噪
    使用ffmpeg命令处理媒体文件
  • 原文地址:https://www.cnblogs.com/saryli/p/11691135.html
Copyright © 2011-2022 走看看