golang 读写操作

package main

import (
   "bufio"
   "fmt"
   "io"
   "os"
   "strconv"
   "unsafe"
)

func echo() {
   reader := bufio.NewReader(os.Stdin)
   writer := bufio.NewWriter(os.Stdout)
   for {
      fmt.Println("请输入你的消息")
      line, prefix, err := reader.ReadLine()
      if err != nil {
         fmt.Println("读写异常", err, prefix)
      }
      fmt.Print("你输入的消息为:")
      writer.WriteString(string(line) + "\r\n")
      writer.Flush() //不加上不会有输出
      //fmt.Println(string(line), prefix)
      if string(line) == "bye" {
         break
      }
   }
}
func WriteFile() {
   var fn string = "./1.txt"
   /**
   第二个参数
   // 只读模式
       O_RDONLY int = syscall.O_RDONLY // open the file read-only.
       // 只写模式
       O_WRONLY int = syscall.O_WRONLY // open the file write-only.
       // 可读可写
       O_RDWR   int = syscall.O_RDWR   // open the file read-write.
       // The remaining values may be or'ed in to control behavior.
       // 追加内容
       O_APPEND int = syscall.O_APPEND // append data to the file when writing.
       // 创建文件,如果文件不存在
       O_CREATE int = syscall.O_CREAT  // create a new file if none exists.
       // 与创建文件一同使用,文件必须存在
       O_EXCL   int = syscall.O_EXCL   // used with O_CREATE, file must not exist.
       // 打开一个同步的文件流
       O_SYNC   int = syscall.O_SYNC   // open for synchronous I/O.
       // 如果可能,打开时缩短文件
       O_TRUNC  int = syscall.O_TRUNC  // truncate regular writable file when opened.
   */
   /**
   第三个参数
    // 文件夹模式
       ModeDir        FileMode = 1 << (32 - 1 - iota) // d: is a directory
       // 追加模式
       ModeAppend                                     // a: append-only
       // 单独使用
       ModeExclusive                                  // l: exclusive use
       // 临时文件
       ModeTemporary                                  // T: temporary file; Plan 9 only
       // 象征性的关联
       ModeSymlink                                    // L: symbolic link
       // 设备文件
       ModeDevice                                     // D: device file
       // 命名管道
       ModeNamedPipe                                  // p: named pipe (FIFO)
       // Unix 主机 socket
       ModeSocket                                     // S: Unix domain socket
       // 设置uid
       ModeSetuid                                     // u: setuid
       // 设置gid
       ModeSetgid                                     // g: setgid
       // UNIX 字符串设备,当设备模式是设置unix
       ModeCharDevice                                 // c: Unix character device, when ModeDevice is set
       // 粘性的
       ModeSticky                                     // t: sticky
       // 非常规文件;对该文件一无所知
       ModeIrregular                                  // ?: non-regular file; nothing else is known about this file

       // bit位遮盖,不变的文件设置为none
       // Mask for the type bits. For regular files, none will be set.
       ModeType = ModeDir | ModeSymlink | ModeNamedPipe | ModeSocket | ModeDevice | ModeCharDevice | ModeIrregular
       // 权限位
       ModePerm FileMode = 0777 // Unix permission bits
   */
/**
golang os.OpenFile几种常用模式

os.O_WRONLY | os.O_CREATE | O_EXCL 如果已经存在,则失败
os.O_WRONLY | os.O_CREATE 如果已经存在,会覆盖写,不会清空原来的文件,而是从头直接覆盖写
os.O_WRONLY | os.O_CREATE | os.O_APPEND 如果已经存在,则在尾部添加写
*/
   f, err := os.OpenFile(fn, os.O_WRONLY|os.O_CREATE|os.O_APPEND, os.ModeAppend|os.ModePerm)
   if err != nil {
      fmt.Println("打开文件异常", err)
   }
   defer f.Close()

   writer := bufio.NewWriter(f)

   for i := 0; i < 10; i++ {
      writer.WriteString("item" + strconv.Itoa(i) + "\r\n")
   }
   writer.Flush()

}
func ReadFile() {
   var fn string = "./1.txt"
   f, err := os.OpenFile(fn, os.O_RDONLY, os.ModeAppend)
   if err != nil {
      fmt.Println("打开文件失败", err)
   }
   defer f.Close()
   reader := bufio.NewReader(f)

   for {
      line, _, err := reader.ReadLine()
      if err != nil {
         break
      }
      if line == nil {
         break
      }
      fmt.Println(string(line))
   }
}

func copyFile() {
   var src string = "./1.txt"
   var dst string = "./2.txt"
   r, err := os.OpenFile(src, os.O_RDONLY, os.ModeAppend)
   if err != nil {
      fmt.Println("打开读文件异常", err)
   }
   defer r.Close()
   w, err := os.OpenFile(dst, os.O_WRONLY|os.O_CREATE|os.O_APPEND, os.ModeAppend|os.ModePerm)
   if err != nil {
      fmt.Println("打开写文件异常", err)
   }
   defer w.Close()
   //var bufs [1024]byte
   reader := bufio.NewReader(r)
   writer := bufio.NewWriter(w)

   io.Copy(writer, reader)
   //writer.Flush()

}
func echo2() {
   var b []byte = []byte("hello")
   fmt.Println(string(b))
}

type bytes []byte

// 非线程安全地
func ToString(b []byte) string {
   return *(*string)(unsafe.Pointer(&b))
}

// func (b []byte) ToString() string {
//    return *(*string)(unsafe.Pointer(&b))
// }
func ToBytes(s string) []byte {

   b := *(*[]byte)(unsafe.Pointer(&s))
   fmt.Println(b)
   return b
}
func transfer() {
   b := ToBytes("hello")
   fmt.Println(b)
   s := ToString(b)
   fmt.Println(s)
}
func main() {
   //WriteFile()
   //ReadFile()
   copyFile()
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值