首页 > 技术文章 > golang-os文件操作

landv 2019-06-27 14:55 原文

golang-os文件操作

package main

import (
    "fmt"
    "os"
)

//func main() {
//    f,err :=os.Create("/home/landv/testOne.txt")
//    if err != nil {
//        fmt.Println("create err:",err)
//        return
//    }
//    defer f.Close()
//    fmt.Println("successful")
//}
//func main() {
//    f,err :=os.Open("/home/landv/testOne.txt") //以只读方式打开
//    if err != nil {
//        fmt.Println("create err:",err)
//        return
//    }
//    defer f.Close()
//    _, err = f.WriteString("这是一个One测试文件#######")
//    if err != nil {
//        fmt.Println("WriteString err:",err)
//        return
//    }
//    fmt.Println("successful")
//}
func main() {
    f,err :=os.OpenFile("/home/landv/testOne.txt",os.O_RDWR,6)
    if err != nil {
        fmt.Println("create err:",err)
        return
    }else {

        content :="这是要追加的内容\n"
        n,_ :=f.Seek(0,2)
        _,err =f.WriteAt([]byte(content),n)
    }
    defer f.Close()


    //_, err = f.WriteString("这是一个One测试文件#######")
    //
    //if err != nil {
    //    fmt.Println("WriteString err:",err)
    //    return
    //}

    fmt.Println("successful")
}

 添加O_APPEND就可以追加内容了

f, err := os.OpenFile(fileName, os.O_WRONLY|os.O_APPEND, 0666)

 

n,_ :=f.Seek(io.SeekStart,io.SeekEnd)
//使用常量好理解,当然你可以直接写(0,2)

 

文件读操作

package main

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

func main() {
    //_,err :=os.Create("D:/gotest/aaa.txt")
    f,err :=os.OpenFile("D:/gotest/aaa.txt",os.O_RDWR,6)
    if err   != nil{
        fmt.Println("OpenFile err:",err)
        return
    }
    defer f.Close()
    fmt.Println("Suceessful")
    //_, _ = f.WriteString("############\n")

    reader  := bufio.NewReader(f)

    for {
        buf, err := reader.ReadBytes('\n')
        if err != nil && err==io.EOF{
            fmt.Println("文件读取完毕")
            return
        }else if err != nil {
            fmt.Println("err:", err)
        }
        fmt.Println(string(buf))
    }
}

 文件拷贝

 

package main

import (
    "fmt"
    "io"
    "os"
)

func main() {
    //打开读文件
    f_r,err :=os.Open("/home/landv/testOne.txt")
    if err != nil {
        fmt.Println("Open err:",err)
        return
    }
    defer f_r.Close()
    //打开写文件
    f_w,err :=os.Create("/home/landv/1.txt")
    if err != nil {
        fmt.Println("Create err:",err)
        return
    }
    defer f_w.Close()

    //从文件中读取数据,放到缓冲区中
    buf := make([]byte, 4096)
    //循环从读文件中,获取数据,原封不动的写到另一个文件中
    for {


        n, err := f_r.Read(buf)
        if err != nil && err == io.EOF {
            fmt.Printf("读完了;n=%d\n", n)
            return
        }
        _, _ = f_w.Write(buf[:n]) //读多少,写多少

    }
}

 目录操作

package main

import (
    "fmt"
    "os"
)

func main() {

    fmt.Println("请输入都要查询的目录:")
    var path string
    _, _ = fmt.Scan(&path)

    f, err := os.OpenFile(path, os.O_RDONLY, os.ModeDir)
    if err != nil {
        fmt.Println("err:", err)
    }
    defer f.Close()

    //读取目录项
    info, err := f.Readdir(-1)//-1 读取目录中所有的目录项
    //变量返回的切片
    for _, fileInfo := range info{
        if fileInfo.IsDir(){
            fmt.Println(fileInfo.Name(),"是一个目录")
            fmt.Println("时间是:",fileInfo.ModTime())
        }else {
            fmt.Println(fileInfo.Name(),"是一个文件")
        }
    }
}

 

推荐阅读