go读写文件

本文介绍了如何使用Golang在Go程序中通过`os.OpenFile`和`os.O_TRUNC`、`os.O_APPEND`标志进行文件的覆盖写入和追加写入操作,包括示例代码和不同场景的应用。同时提到了使用`os.O_WRONLY|os.O_APPEND`进行文件追加的简化方法。
摘要由CSDN通过智能技术生成
package main

import (
	"log"
	"os"
)

func main() () {
/* 适合集体文件的修改
	myfile, err := os.ReadFile("/home/pi/log")
	if err != nil {
		log.Printf("Read /home/pi/log failed\r\n")
		return
	}
    log.Printf("myfile:%+v\r\n",myfile)
 

 
    apd_conf := string("hello")
    err = os.WriteFile("/home/pi/log", []byte(apd_conf), 0777)
  

  
   	myfile, err = os.ReadFile("/home/pi/log")
	if err != nil {
		log.Printf("Read /home/pi/log failed\r\n")
		return
	}
    log.Printf("myfile:%+v\r\n",myfile) 
    log.Printf("myfile:%+v\r\n",string(myfile)) 
    */
    /*
    //文件追加写入 https://blog.csdn.net/whatday/article/details/112246920?utm_medium=distribute.pc_relevant.none-task-blog-2~default~baidujs_title~default-0.highlightwordscore&spm=1001.2101.3001.4242.1
    f, err := os.OpenFile("/home/pi/log", os.O_WRONLY, 0777)
	if err != nil {
		log.Printf("Open /home/pi/log failed\r\n")
	} else {
        content := "123456"
 
		// 查找文件末尾的偏移量
		n, _ := f.Seek(0, 2)
 
		// 从末尾的偏移量开始写入内容
		_, err = f.WriteAt([]byte(content), n)
	}
   */
   //上面的方法比较麻烦 正常是打开的时候就定好
    f, err := os.OpenFile("/home/pi/log", os.O_WRONLY|os.O_APPEND, 0777)
	if err != nil {
		log.Printf("Open /home/pi/log failed\r\n")
	} else {
        content := "123456"
 
		// 查找文件末尾的偏移量
		//n, _ := f.Seek(0, 2)
 
		// 从末尾的偏移量开始写入内容
		//_, err = f.WriteAt([]byte(content), n)
        _, err = f.Write([]byte(content))
	}

	defer f.Close()
}

写一个测试程序 文件写

package main

import (
    "log"
    "os"
    "flag"
    "time"
    "strings"
)

//Writefile("/home/pi/log","hello")
func Writefile(filename string, str string)(){
    f, err := os.OpenFile(filename, os.O_WRONLY|os.O_APPEND|os.O_CREATE, 0777)
	if err != nil {
		log.Printf("OpenFile failed\r\n")
	} else {
        _, err = f.Write([]byte(str))
	}
	defer f.Close()
    log.Printf("Writefile ok\r\n")
}

func Clearfile(filename string)(){
    f, err := os.OpenFile(filename, os.O_WRONLY|os.O_TRUNC, 0777)//打开文件 从头开始写 才是覆盖的效果
	if err != nil {
		log.Printf("OpenFile failed\r\n")
	} else {
       now_time := time.Now()
       currentTime := now_time.Format("2006-01-02")
        _, err = f.Write([]byte(currentTime))
	}
	defer f.Close()
    log.Printf("Clearfile ok\r\n")
}


func main() {
	flag.Parse()
    whattodo := flag.Arg(0)
    //根据不同输入参数做不同的事情 因为默认是string 这里就简单用是否包含区分
    if strings.Contains(whattodo, "1") {    
		Writefile("/home/pi/log","hello")
	} else {
        Clearfile("/home/pi/log")
    }
}

golang写入文件时,覆盖前文件(将前文件清空)_刘洪瑞的博客-CSDN博客_go清空文件

flags -- 该参数可以是以下选项,多个使用 "|" 隔开:

  • os.O_RDONLY: 以只读的方式打开
  • os.O_WRONLY: 以只写的方式打开
  • os.O_RDWR : 以读写的方式打开
  • os.O_NONBLOCK: 打开时不阻塞
  • os.O_APPEND: 以追加的方式打开
  • os.O_CREAT: 创建并打开一个新文件
  • os.O_TRUNC: 打开一个文件并截断它的长度为零(必须有写权限)
  • os.O_EXCL: 如果指定的文件存在,返回错误
  • os.O_SHLOCK: 自动获取共享锁
  • os.O_EXLOCK: 自动获取独立锁
  • os.O_DIRECT: 消除或减少缓存效果
  • os.O_FSYNC : 同步写入
  • os.O_NOFOLLOW: 不追踪软链接
  • Python os.open() 方法 | 菜鸟教程
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值