89_Go基础_1_57 IO操作

  1 package main
  2 
  3 import (
  4     "fmt"
  5     "os"
  6     "path/filepath"
  7 )
  8 
  9 func main() {
 10     /*
 11         文件操作:
 12         1.路径:
 13             相对路径:relative
 14                 ab.txt
 15                 相对于当前工程
 16             绝对路径:absolute
 17                 /Users/ruby/Documents/pro/a/aa.txt
 18 
 19             .当前目录
 20             ..上一层
 21         2.创建文件夹,如果文件夹存在,创建失败
 22             os.MkDir(),创建一层
 23             os.MkDirAll(),可以创建多层
 24 
 25         3.创建文件,Create采用模式0666(任何人都可读写,不可执行)创建一个名为name的文件,如果文件已存在会截断它(为空文件)
 26             os.Create(),创建文件
 27 
 28         4.打开文件:让当前的程序,和指定的文件之间建立一个连接
 29             os.Open(filename)
 30             os.OpenFile(filename,mode,perm)
 31 
 32         5.关闭文件:程序和文件之间的链接断开。
 33             file.Close()
 34 
 35         5.删除文件或目录:慎用,慎用,再慎用
 36             os.Remove(),删除文件和空目录
 37             os.RemoveAll(),删除所有
 38     */
 39 
 40     // 1.路径
 41     fileName1 := "D:\\Go\\web2\\aa.txt"
 42     fileName2 := "bb.txt"
 43     fmt.Println(filepath.IsAbs(fileName1)) // true
 44     fmt.Println(filepath.IsAbs(fileName2)) // false
 45     fmt.Println(filepath.Abs(fileName1))   // D:\Go\web2\aa.txt <nil>
 46     fmt.Println(filepath.Abs(fileName2))   // D:\Go\web2\bb.txt <nil>
 47 
 48     // 2.创建目录
 49     err := os.Mkdir("D:\\Go\\web2\\dir1", os.ModePerm) // 必须不存在
 50     if err != nil {
 51         fmt.Println("err:", err)
 52         return
 53     }
 54     fmt.Println("文件夹创建成功。。")
 55 
 56     err = os.MkdirAll("D:\\Go\\web2\\dir1\\dir1_1", os.ModePerm) // 递归创建,存在则保持不变
 57     if err != nil {
 58         fmt.Println("err:", err)
 59         return
 60     }
 61     fmt.Println("多层文件夹创建成功")
 62 
 63     // 3.创建文件:Create采用模式0666(任何人都可读写,不可执行)创建一个名为name的文件,如果文件已存在会截断它(为空文件)
 64     file1, err := os.Create("D:\\Go\\web2\\aa.txt") // 存在则清空内容
 65     if err != nil {
 66         fmt.Println("err:", err)
 67         return
 68     }
 69     fmt.Println("Create OK,", file1) // &{0xc00007c780}
 70 
 71     file2, err := os.Create("cc.txt") // 创建相对路径的文件,是以当前工程为参照的
 72     if err != nil {
 73         fmt.Println("err :", err)
 74         return
 75     }
 76     fmt.Println(file2) // &{0xc00007aa00}
 77 
 78     // 4.打开文件:
 79     file3, err := os.Open("./aa.txt") // 只读的
 80     if err != nil {
 81         fmt.Println("err:", err)
 82         return
 83     }
 84     fmt.Println(file3) // &{0xc0000d0780}
 85 
 86     /*
 87         第一个参数:文件名称
 88         第二个参数:文件的打开方式
 89             const (
 90         // Exactly one of O_RDONLY, O_WRONLY, or O_RDWR must be specified.
 91             O_RDONLY int = syscall.O_RDONLY // open the file read-only.
 92             O_WRONLY int = syscall.O_WRONLY // open the file write-only.
 93             O_RDWR   int = syscall.O_RDWR   // open the file read-write.
 94             // The remaining values may be or'ed in to control behavior.
 95             O_APPEND int = syscall.O_APPEND // append data to the file when writing.
 96             O_CREATE int = syscall.O_CREAT  // create a new file if none exists.
 97             O_EXCL   int = syscall.O_EXCL   // used with O_CREATE, file must not exist.
 98             O_SYNC   int = syscall.O_SYNC   // open for synchronous I/O.
 99             O_TRUNC  int = syscall.O_TRUNC  // truncate regular writable file when opened.
100         )
101         第三个参数:文件的权限:文件不存在创建文件,需要指定权限
102     */
103 
104     file4, err := os.OpenFile("./aa.txt", os.O_RDONLY|os.O_WRONLY, os.ModePerm)
105     if err != nil {
106         fmt.Println("err:", err)
107         return
108     }
109     fmt.Println(file4) // &{0xc0000d0780}
110 
111     // 5关闭文件,
112     file4.Close()
113 
114     // 6.删除文件或文件夹:
115     err = os.Remove("D:\\Go\\web2\\cc.txt")
116     if err != nil {
117         fmt.Println("err:", err)
118         return
119     }
120     fmt.Println("删除文件成功。。")
121     // 删除目录
122     err = os.RemoveAll("D:\\Go\\web2\\dir1")
123     if err != nil {
124         fmt.Println("err:", err)
125         return
126     }
127     fmt.Println("删除目录成功。。")
128 }