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 }