60. 文件和目录

作者: 厚土火焱 | 来源:发表于2017-10-18 18:36 被阅读97次

在服务端操作中,经常需要对目录和文件进行操作。最常见的比如日志文件的处理。
我们需要按照日志类别分目录存放目录。
我们需要按照日期每天建立一个新的日志文件。
对于时间太过久远的日志和目录,也有需要删除的需求。
在 GO 语言中这些事情做起来都是轻松写意的。<(^-^)>
文件操作的大部分函数都是在 os 包中的。
因此,我们的 import 是这样的

import (
    "os"
    "fmt"
    "time"
)

目录操作

建立一个单独的目录

os.Mkdir("temp", 0777)      //建立一个目录

建立一个多级目录

os.MkdirAll("temp/temp01/temp0101", 0777)       //建立多级目录

通过上面两条语句,我们就能得到 temp 目录和一个以 temp为最上层目录的三级目录,最底层目录是 temp0101
移除目录使用的是 Remove 或 RemoveAll
Remove 移除一个目录,并且要求目录内没有其他文件或目录,否则会报错。

err := os.Remove("temp")    //移除一个目录

如果要移除多级目录,或者移除目录时目录中的文件和其他目录也要一起移除,就需要使用 RemoveAll。

os.RemoveAll("temp")        //移除多级目录

文件操作

建立一个文件使用 os.Create

    userFile := "tt.txt"
    fout, err := os.Create(userFile)

使用 fout.WriteString 或 fout.Write 写入文件内容

        fout.WriteString(time.Now().Format("2016-01-02 15:04:05.0000000")+" Shun love me.\r\n")
        fout.Write([]byte(time.Now().Format("2016-01-02 15:04:05.0000000")+" Shun love me.\r\n"))

打开文件使用 os.Open

fl, err := os.Open(userFile)

读取文件使用的是 os.Read 和 os.ReadAt
其中 os.Read 是读取完整的文件内容;os.ReadAt 可以读取某指定位置之后的内容。

buf := make([]byte, 1024)
n, _ := fl.Read(buf)
n, _ := fl.ReadAt(buf, 255)

看一个代码示例,来理解以上的内容

package main

import (
    "os"
    "fmt"
    "time"
)

//文件处理
func myfile()  {
    //*****目录处理**************************
    os.Mkdir("temp", 0777)      //建立一个目录
    os.Mkdir("temp", 0777)      //建立一个目录
    os.MkdirAll("temp/temp01/temp0101", 0777)       //建立多级目录
    err := os.Remove("temp")    //移除一个目录
    if err != nil{
        fmt.Println(err)
    }
    os.RemoveAll("temp")        //移除多级目录

    //*****文件处理***************************
    userFile := "tt.txt"
    fout, err := os.Create(userFile)
    if err != nil{
        fmt.Println(userFile, err)
        return
    }
    defer fout.Close()
    for i := 0; i < 5; i++{
        fout.WriteString(time.Now().Format("2006-01-02 15:04:05.0000000")+" Shun love me.\r\n")
        fout.Write([]byte(time.Now().Format("2006-01-02 15:04:05.0000000")+" Shun love me.\r\n"))
    }

    fl, err := os.Open(userFile)
    if err != nil{
        fmt.Println(userFile, err)
        return
    }
    defer fl.Close()
    buf := make([]byte, 1024)
    for{
        n, _ := fl.Read(buf)
        if 0 == n {
            break
        }
        os.Stdout.Write(buf[:n])
    }
    fmt.Println("--------华丽分割线---------------")
    for{
        n, _ := fl.ReadAt(buf, 255)
        if 0 == n{
            break
        }
        os.Stdout.Write(buf[:n])
        break
    }


}

运行效果如下

remove temp: The directory is not empty.
2017-10-18 18:32:25.7821575 Shun love me.
2017-10-18 18:32:25.7971584 Shun love me.
2017-10-18 18:32:25.7971584 Shun love me.
2017-10-18 18:32:25.7971584 Shun love me.
2017-10-18 18:32:25.7971584 Shun love me.
2017-10-18 18:32:25.7971584 Shun love me.
2017-10-18 18:32:25.7971584 Shun love me.
2017-10-18 18:32:25.7971584 Shun love me.
2017-10-18 18:32:25.7971584 Shun love me.
2017-10-18 18:32:25.7971584 Shun love me.
--------华丽分割线---------------
.
2017-10-18 18:32:25.7971584 Shun love me.
2017-10-18 18:32:25.7971584 Shun love me.
2017-10-18 18:32:25.7971584 Shun love me.
2017-10-18 18:32:25.7971584 Shun love me.

需要看目录的建立和删除演示效果的,可以把其余代码注释掉,再运行即可。
如果是要在文件尾部增加内容,需要用如下语句打开

fout, err := os.OpenFile(userFile, os.O_WRONLY|os.O_APPEND, 0666)

相关文章

  • 60. 文件和目录

    在服务端操作中,经常需要对目录和文件进行操作。最常见的比如日志文件的处理。我们需要按照日志类别分目录存放目录。我们...

  • 文件管理(一)

    目录 6.1 文件 文件概念和命名 文件类型和属性 文件存取方法 6.2 文件目录 文件控制块、文件目录与目录文件...

  • 文件和目录

    access stat fstat lstat 这些函数在python的os中也有 chmod lchmod fc...

  • 文件和目录

    文件和目录 函数stat、fstat、fstatat和lstat 4个stat函数主要用于返回文件的信息结构 st...

  • 文件和目录

    iconv -f fromEncoding -t toEncoding inputFile > outputFil...

  • 文件和目录

    Linux下的文件类型普通文件;目录文件;块特殊文件; //这种文件提供对设备带缓冲的访问 ;字符特殊文件; ...

  • Linux命令行

    文件和目录操作 复制文件目录 移动文件目录 重命名文件目录 删除文件目录 创建文件目录 查看文件内容 查看文件类型...

  • Linux的常用命令

    文件和目录 关机 重启 文件和目录 文件搜索find / -name file 从 '/' 开始搜索目标文件和目录...

  • 命令用法非完全整理

    Linux常用命令知道哪些 文件和目录rm删除文件和目录mv移动文件和目录(可用来修改文件名字)cp复制文件和目录...

  • Linux笔记2

    文件、目录操作命令 cp — 复制文件和目录mv — 移动/重命名文件和目录mkdir — 创建目录rm — 删除...

网友评论

    本文标题:60. 文件和目录

    本文链接:https://www.haomeiwen.com/subject/acmeuxtx.html