zoukankan      html  css  js  c++  java
  • [golang] golang文件读写 os.OpenFile(fileName,os.O_APPEND|os.O_WRONLY,os.ModeAppend)

    [golang] golang文件读写 os.OpenFile(fileName,os.O_APPEND|os.O_WRONLY,os.ModeAppend)

    读写文件要用到的OS包

    func OpenFile(name string, flag int, perm FileMode) (*File, error) 

    该方法第一个参数为文件路径,第二个参数控制文件的打开方式,第三个参数控制文件模式

    可用的打开方式有

    // Flags to OpenFile wrapping those of the underlying system. Not all
    // flags may be implemented on a given system.
    const (
        // Exactly one of O_RDONLY, O_WRONLY, or O_RDWR must be specified.
        // 只读模式
        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.
    )

    打开模式

    // The defined file mode bits are the most significant bits of the FileMode.
    // The nine least-significant bits are the standard Unix rwxrwxrwx permissions.
    // The values of these bits should be considered part of the public API and
    // may be used in wire protocols or disk representations: they must not be
    // changed, although new bits might be added.
    const (
        // The single letters are the abbreviations
        // used by the String method's formatting.
        // 文件夹模式
        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
    )

    创建一个文件并追加内容

    package main
    
    import (
        "os"
    )
    func main() {
        fname := "/tmp/t.txt"
        f, err := os.OpenFile(fname, os.O_CREATE|os.O_RDWR|os.O_APPEND, os.ModeAppend|os.ModePerm)
        if err != nil {
            fmt.Println(err)
        }
        f.WriteString("test")
        f.Close()
    }

    删除文件

    os.Remove(fname)

    创建目录

    dname :="/tmp/d"

    os.Mkdir(dname,os.ModeDir|os.ModePerm)

    创建完整目录路径,即中间目录不存在的话也一起创建

    os.MkdirAll(dname,os.ModeDir|os.ModePerm)

    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  【如果已经存在,则在尾部添加写】

  • 相关阅读:
    一段笑话
    遇到了DIV被下拉框挡住的问题,2天没有解决了~晕死我了#)
    盘点JavaScript中5个常用的对象
    C# ARGB转RGB之Alpha通道混合与亮度
    工作进度进度条js
    一个很漂亮的图片浏览效果js
    很好的几个js滑动条效果
    实现textarea限制输入字数
    Asp 出现Microsoft JScript 编译错误 (0x800A03EC) 缺少 ';'解决办法
    Request.UrlReferrer详解
  • 原文地址:https://www.cnblogs.com/landv/p/13140156.html
Copyright © 2011-2022 走看看