go 对文件操作

  • read文件

    package main
    
    import (
    	"fmt"
    	"io"
    	"os"
    )
    
    func main() {
    	file, err := os.Open("password")
    	if err != nil {
    		return
    	}
    	defer file.Close()
    	ctx := make([]byte, 8)
    
    	for {
    		n, err := file.Read(ctx)
    		if err == io.EOF {
    			break
    		}
    		fmt.Println(n, err, string(ctx[:n]), len(string(ctx[:n])))
    	}
    }
    
    
  • write文件

    ackage main
    
    import (
    	"os"
    )
    
    func main() {
    	file, err := os.Create("name.txt")
    
    	if err != nil {
    		return
    	}
    
    	defer file.Close()
    
    	file.Write([]byte("abcqweqw"))
    	file.Write([]byte("abcqweqw"))
    	file.Write([]byte("abcqweqw"))
    	file.Write([]byte("abcqweqw"))
    
    }
    
  • Openfile文件

    package main
    
    import "os"
    
    func main() {
    	file, err := os.OpenFile("name.txt", os.O_CREATE|os.O_RDWR|os.O_TRUNC, os.ModePerm)
    	if err != nil {
    		return
    	}
    	file.Write([]byte("asdfdfd"))
    }
    
    
    • Flag

      • os.O_CREATE|os.O_APPEND| os.O_CREATE|os.O_TRUNC|os.O_WRONLY

        os.O_RDONLY // 只读
        os.O_WRONLY // 只写
        os.O_RDWR // 读写
        os.O_APPEND // 追加(Append)
        os.O_CREATE // 如果文件不存在则先创建
        os.O_TRUNC // 文件打开时裁剪文件
        os.O_EXCL // 和O_CREATE一起使用,文件不能存在
        os.O_SYNC // 以同步I/O的方式打开
        
      • ​ 第三个参数:权限(rwx:0-7)

        0:没有任何权限
        1:执行权限
        2:写权限
        3:写权限和执行权限
        4:读权限
        5:读权限和执行权限
        6:读权限和写权限
        7:读权限,写权限,执行权限
        
    • seek 偏移

      seek(offset int, whence int),表示设置光标的位置
      offset int,设置多少个字节
      whence int,从哪开始
      0,距离文件开头
      1,当前的位置
      2,距离文件末尾
      */

      package main
      
      import (
      	"fmt"
      	"io"
      	"os"
      )
      
      func main() {
      	file, err := os.OpenFile("password.txt", os.O_CREATE|os.O_APPEND|os.O_RDWR, os.ModePerm)
      	if err != nil {
      		return
      	}
      
      	defer file.Close()
      
      	ctx := make([]byte, 3)
      
      	file.Seek(0, 0)
      	n, err := file.Read(ctx)
      	if err == io.EOF {
      		return
      	}
      	fmt.Println(n, string(ctx)) //3 123
      
      	file.Seek(0, 1)
      	n, err = file.Read(ctx)
      	fmt.Println(n, string(ctx)) //3 456
      
      	file.Seek(0, 1) //789
      	n, err = file.Read(ctx)
      	fmt.Println(n, string(ctx)) //
      
      }
      
posted @ 2022-02-02 15:28  wangsk  阅读(42)  评论(0)    收藏  举报