🔥码云GVP开源项目 12k star Uniapp+ElementUI 功能强大 支持多语言、二开方便! 广告
### 文件基本操作 | 权限 | 权限数值 | 作业 | | --- | --- | --- | | 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) } ```