Go基础_1_57 IO操作

Tutorial: Go初级 Category: Go Published: 2026-04-07 13:58:26 Views: 21 Likes: 0 Comments: 0
package main

import (
    "fmt"
    "os"
    "path/filepath"
)

func main() {
    /*
        文件操作:
        1.路径:
            相对路径:relative
                ab.txt
                相对于当前工程
            绝对路径:absolute
                /Users/ruby/Documents/pro/a/aa.txt

            .当前目录
            ..上一层
        2.创建文件夹,如果文件夹存在,创建失败
            os.MkDir(),创建一层
            os.MkDirAll(),可以创建多层

        3.创建文件,Create采用模式0666(任何人都可读写,不可执行)创建一个名为name的文件,如果文件已存在会截断它(为空文件)
            os.Create(),创建文件

        4.打开文件:让当前的程序,和指定的文件之间建立一个连接
            os.Open(filename)
            os.OpenFile(filename,mode,perm)

        5.关闭文件:程序和文件之间的链接断开。
            file.Close()

        5.删除文件或目录:慎用,慎用,再慎用
            os.Remove(),删除文件和空目录
            os.RemoveAll(),删除所有
    */

    // 1.路径
    fileName1 := "D:\\Go\\web2\\aa.txt"
    fileName2 := "bb.txt"
    fmt.Println(filepath.IsAbs(fileName1)) // true
    fmt.Println(filepath.IsAbs(fileName2)) // false
    fmt.Println(filepath.Abs(fileName1))   // D:\Go\web2\aa.txt <nil>
    fmt.Println(filepath.Abs(fileName2))   // D:\Go\web2\bb.txt <nil>

    // 2.创建目录
    err := os.Mkdir("D:\\Go\\web2\\dir1", os.ModePerm) // 必须不存在
    if err != nil {
        fmt.Println("err:", err)
        return
    }
    fmt.Println("文件夹创建成功。。")

    err = os.MkdirAll("D:\\Go\\web2\\dir1\\dir1_1", os.ModePerm) // 递归创建,存在则保持不变
    if err != nil {
        fmt.Println("err:", err)
        return
    }
    fmt.Println("多层文件夹创建成功")

    // 3.创建文件:Create采用模式0666(任何人都可读写,不可执行)创建一个名为name的文件,如果文件已存在会截断它(为空文件)
    file1, err := os.Create("D:\\Go\\web2\\aa.txt") // 存在则清空内容
    if err != nil {
        fmt.Println("err:", err)
        return
    }
    fmt.Println("Create OK,", file1) // &{0xc00007c780}

    file2, err := os.Create("cc.txt") // 创建相对路径的文件,是以当前工程为参照的
    if err != nil {
        fmt.Println("err :", err)
        return
    }
    fmt.Println(file2) // &{0xc00007aa00}

    // 4.打开文件:
    file3, err := os.Open("./aa.txt") // 只读的
    if err != nil {
        fmt.Println("err:", err)
        return
    }
    fmt.Println(file3) // &{0xc0000d0780}

    /*
        第一个参数:文件名称
        第二个参数:文件的打开方式
            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.
        )
        第三个参数:文件的权限:文件不存在创建文件,需要指定权限
    */

    file4, err := os.OpenFile("./aa.txt", os.O_RDONLY|os.O_WRONLY, os.ModePerm)
    if err != nil {
        fmt.Println("err:", err)
        return
    }
    fmt.Println(file4) // &{0xc0000d0780}

    // 5关闭文件,
    file4.Close()

    // 6.删除文件或文件夹:
    err = os.Remove("D:\\Go\\web2\\cc.txt")
    if err != nil {
        fmt.Println("err:", err)
        return
    }
    fmt.Println("删除文件成功。。")
    // 删除目录
    err = os.RemoveAll("D:\\Go\\web2\\dir1")
    if err != nil {
        fmt.Println("err:", err)
        return
    }
    fmt.Println("删除目录成功。。")
}