### 文件基本操作
| 权限 | 权限数值 | 作业 |
| --- | --- | --- |
| r | 4 | read,读取。读取文件内容,浏览目录 |
| w | 2 | write,写入。新增或者修改内容,删除移动目录或者目录里面文件 |
| x | 1 | execute,执行。执行文件,进入目录 |
### 文件的创创建与打开
> func OpenFile(name string, flag int, perm FileMode) ,返回(file *File, err error)
> name string 路径
> flag int 指定的文件访问模式
> perm FileMode 位掩码参数,文件模式和权限,如0776
>
OpenFile是一个更底层的文件打开函数,大多数调用者都应用Open或Create代替本函数。它会使用指定的选项(如O_RDONLY等)、指定的模式(如0666等)打开指定名称的文件。如果操作成功,返回的文件对象可用于/O。如果出错,错误底层类型是*PathError。
```
// flag指定的文件访问模式 os中的常量 并非所有操作系统兼容
const (
O_RDONLY int = syscall.O_RDONLY // 只读模式打开文件
O_WRONLY int = syscall.O_WRONLY //只写模式打开文件
O_RDWR int = syscall.O_RDWR //读写模式打开文件
O_APPEND int = syscall.O_APPEND //写操数据加文件尾部
O_CREATE int = syscall.O_CREAT //如果不存在将创建一个新文件
O_EXCL int = syscall.O_EXCL // 和O_CREATE配合使用,文件必须不存在
O_SYNC int = syscall.O_SYNC //打开文件用于同步I/0
O_TRUNC int = syscall.O_TRUNC // 如果可能,打开时清空文件
)
```
其中,O_RDONLY、O_WRONLY、O_RDWR应该只指定一个,剩下的通过“|”操作符来指定。该函数内部会给flags加上syscall.O_CLOEXEC,在fork子进程时会关闭通过OpenFile打开的文件,即子进程不会重用该文件描述符。
```
// perm 位掩码参数指定的常量 类型是 os.FileMode
const(
// 单字被 string 方法用于格式化的属性缩写
ModeDir FileMode = 1 << (32-1-iota) //d : 目录
ModeAppend // a:只能写人,且只能写入到末尾
ModeExclusive //1:用于执行
ModeTemporary // T:1 临时文件(非备份文件)
ModeSymlink //L:符号链接(不是快捷方式文件)
ModeDevice //D:设备
ModeNamedPipe //p:命名管道(FIFO)
ModeSocket //S:Unix域socket
ModeSetuid // u:表示文件具有其创建者户id权限
ModeSetgid //g:表示文件具有其创建者组id的权限
ModeCharDevice //c:字设备,需已设置ModeDevice
ModeSticky //t:只有root/创建者能删除/移动文件
//覆盖所有类型位(用于通过&获取类型位),对普通文件,所有这些位都不应被设置
ModeType = ModeDir | ModeSymlink | ModeNamedPipe | ModeSocket | ModeDevice
ModePerm FileMode= 0777 // 覆盖所有Unix权限位(用于通过&获取类型位)
)
```
```
package main
import (
"fmt"
"os"
)
//打开文件 如果没有文件 就创建
func mode(path string, fiag int) {
file, err := os.OpenFile(path, fiag, 0766)
if err != nil {
// 错误输出 正常错误输出应该是空的
fmt.Println(err)
}
// 成功了 打印出指针地址
fmt.Println(file)
// &{0xc00010e780}
// 创建成功关闭文件
file.Close()
}
//打开文件 如果没有文件 就创建
func main() {
// os.O_RDWR|os.O_CREATE 表示读写方式打开文件 如果不存在就创立
mode("E:\\flie\\999.txt", os.O_RDWR|os.O_CREATE)
}
```
大多数情况下我们用下面两个函数来创建或者打开文件
> func Open(name string) , 返回(file *File, err error)
> name string 路径
>
Open打开一个文件用于读取。如果操作成功,返回的文件对象的方法可用于读取数据;对应的文件描述符具有O_RDONLY模式。如果出错,错误底层类型是*PathError。
> func Create(name string) , 返回(file *File, err error)
> name string 路径
Create采用模式0666(任何人都可读写,不可执行)创建一个名为name的文件,如果文件已存在就会截断它(为空文件)。如果成功,返回的文件对象可用于I/O;对应的文件描述符具有O_RDWR模式。如果出错,错误底层类型是*PathError。
Open和Create的函数定义如下:
```
func Open(name string) (*File, error){
return OpenFile(name,O_RDONLY, 0)
}
func Create(name string) (*File, error){
return OpenFile(name, O_RDWR|O_CREATE|O_TRUNC, 0666)
}
```
- 安装开发环境
- 安装开发环境
- 安装详细教程
- 引入包
- Go语言基础
- 基本变量与数据类型
- 变量
- 数据类型
- 指针
- 字符串
- 代码总结
- 常量与运算符
- 常量
- 运算符
- 流程控制
- if判断
- for循环
- switch分支
- goto跳转
- 斐波那契数列
- Go语言内置容器
- 数组
- 切片
- 映射
- 函数
- 函数(上)
- 函数(中)
- 函数(下)
- 小节
- 包管理
- 结构体
- 结构体(上)
- 结构体(中)
- 结构体(下)
- 小节
- 错误处理
- 错误处理
- 宕机
- 错误应用
- 小节
- 文件操作
- 获取目录
- 创建和删除目录
- 文件基本操作(上)
- 文件基本操作(中)
- 文件基本操作(下)
- 处理JSON文件
- 接口与类型
- 接口的创建与实现
- 接口赋值
- 接口嵌入
- 空接口
- 类型断言(1)
- 类型断言(2)
- 小节
- 并发与通道
- goroutine协程
- runtime包
- 通道channel
- 单向通道channel
- select
- 线程同步
- 多线程的深入学习
- http编程
- http简介
- Client和Request
- get请求
- post请求
- 模块函数方法
- 模块
- fmt库,模块
- 项目练习
- 爬虫:高三网
- 爬虫:快代理
- 爬虫:快代理2
- 多线程:通道思路
- 多线程爬虫:快代理