同步操作将从 JustryDeng/notebook 强制同步,此操作会覆盖自 Fork 仓库以来所做的任何修改,且无法恢复!!!
确定后同步将在后台操作,完成时将刷新页面,请耐心等待。
格式:
func OpenFile(name string, flag int, perm FileMode) (*File, error)
name
:要打开的文件名
flag
:打开的权限。其取值采用位指示器方式,参数值如下:
O_RDONLY
:只读。必选项,与O_WRONLY
和O_RDWR
三者选其一。
O_WRONLY
:只写。必选项,与O_RDONLY
和O_RDWR
三者选其一。
O_RDWR
:读写。必选项,与O_RDONLY
和O_WRONLY
三者选其一。
O_CREATE
:(如果文件不存在,则)创建文件。注:如果文件存在,则打开文件。
O_TRUNC
:截断文件。注:所谓截断,指的是如果文件存在内容,则清空内容。
perm
:8进制文件权限位,与umask
共同作用,决定最终文件权限位
*File
:(可以简单的理解为)文件描述符。可用来操作文件。
error
:错误信息,nil
代表没有错误。注:
error
是Go语言错误信息的数据类型,nil
代表Go语言当中的空指针,error
返回nil
代表没有错误。
示例:
import (
"fmt"
"os"
)
func main() {
// 创建并打开文件
file, err := os.OpenFile("a.txt", os.O_RDWR|os.O_CREATE|os.O_TRUNC, 0666)
if err != nil {
fmt.Println("Failed to OpenFile", err)
return
}
fmt.Println(file.Name())
}
提示:
- 在Go语言中,
[]byte
和string
,可以互相强制转换(你只管使用强制转换,Go语言负责实现转换逻辑)- 当打开一个文件时,文件的读写位置默认指向文件的开头;写入数据时,读写位置也会跟着移动,当写完之后,读写位置就跑到最后面去了,如果此时你想读取文件内容的话,需要将读写位置调整至文件开头的
[]byte
格式:
// 读取文件内容到b(b是自建缓冲区),返回读取的字节数和错误信息 func (f *File) Read(b []byte) (n int, err error)
f
:对应的文件b
:读取文件时的数据缓冲区n
:已读取的字节总数err
:错误信息
[]byte
格式:
// 将缓冲区b的内容写入文件中,返回写入成功的字节数和错误信息 func (f *File) Write(b []byte) (n int, err error)
f
:对应的文件b
:要写入的数据内容n
:已写入的字节总数err
:错误信息
string
格式:
// Write的另一种实现形式,传递参数为字符串类型 func (f *File) WriteString(s string) (n int, err error)
f
:对应的文件b
:要写入的数据内容n
:已写入的字节总数err
:错误信息
格式:
// 调整文件读写位置,返回调整的距离和错误信息 func (f *File) Seek(offset int64, whence int) (ret int64, err error)
f
:对应的文件
offset
:(相对whence
的)偏移量
whence
:调整的位置
os.SEEK_SET
:文件头示例:
Seek(0, os.SEEK_SET)
:调整至文件的开始位置示例:
Seek(10, os.SEEK_SET)
:调整至从文件开始(index=0)位置(往右)偏移10个字节的位置处(即:index=10位置处,即:第11个字节位置处)
os.SEEK_CUR
:当前位置
os.SEEK_END
:结束位置 示例:Seek(0, os.SEEK_END)
:调整至文件的结束位置
ret
:调整的距离
err
:错误信息
示例:
import (
"fmt"
"os"
)
func main() {
// 创建并打开文件
file, err := os.OpenFile("a.txt", os.O_RDWR|os.O_CREATE|os.O_TRUNC, 0666)
if err != nil {
fmt.Println("Failed to OpenFile", err)
return
}
// 写入字符串
writeByteCount, err := file.WriteString("Hello world\n")
if err != nil {
fmt.Println("Failed to WriteString", err)
return
}
fmt.Printf("write success %d bytes\n", writeByteCount)
// 调整文件读写位置,并读取文件内容
file.Seek(0, os.SEEK_SET)
buf := make([]byte, writeByteCount)
_, err = file.Read(buf)
os.Stdout.Write(buf)
/*
* 释放资源
* <br/>
* defer关键字的作用:
* 1. 被defer标识了的方法(或函数),会延迟到(defer所处)代码块退出前才进行调用。
* 2. 当程序要退出defer关键字所在的代码块(这里即main函数)时,会优先执行被defer标识了的方法(或函数),然后再退出defer关键字所在的代码块。
*/
defer file.Close()
}
输出:
write success 12 bytes
Hello world
此处可能存在不合适展示的内容,页面不予展示。您可通过相关编辑功能自查并修改。
如您确认内容无涉及 不当用语 / 纯广告导流 / 暴力 / 低俗色情 / 侵权 / 盗版 / 虚假 / 无价值内容或违法国家有关法律法规的内容,可点击提交进行申诉,我们将尽快为您处理。