咔咔博客之文件打开与关闭
案例
文件的操做使用os包
linux
package main import ( "fmt" "os" "time" ) func main() { file, e := os.Open("D:/kaka.txt") if e != nil { fmt.Println("文件打开失败") } else { fmt.Println("文件打开成功") } defer func() { file.Close() fmt.Println("文件已关闭") }() fmt.Println("愉快滴欣赏avi艺术") time.Sleep(3 * time.Second) }
注意点
在os.open时,若是你的操做系统时windows这个时候不要打开文件直接复制文件路径,会报一个文件目录的错误windows
The filename, directory name, or volume label syntax is incorrect.微信
在打开文件的路径必须本身手动输入,由于编码有问题编码
打开文件也必须关闭文件,因此在任什么时候候打开一个文件操做后使用延迟执行的defer来进行关闭文件url
defer是延迟执行的关键词,在全部程序都执行完才会执行的代码spa
文件打开模式
- 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_TRUNC int = syscall.O_TRUNC // 覆盖模式
文件权限
权限详解有什么问题能够看这篇文章,详细的说明了权限的问题。
这里简单的说一下 r w x 分别表明的是什么意思
r表示可读
w表示可写
x表示可执行操作系统
任何文件都有使用者,群组,other的概念。 权限所表明的是r = 4 w = 2 x = 1 这块的知识是在linux写过的,就不在继续讨论了。.net
文件读取
func main() { file, e := os.OpenFile("D:/kaka.txt", os.O_RDONLY, 0666) if e != nil { fmt.Println("文件打开失败:err", e) return } else { fmt.Println("文件打开成功") } // 打开时马上挂起关闭程序 defer func() { file.Close() fmt.Println("文件关闭成功") }() // 建立文件的读取器 reader := bufio.NewReader(file) // 死循环读取 for { // 以换行符为界,分批次读取数据,获得readString readString, e := reader.ReadString('\n') if e != nil { fmt.Println("文件读取失败;err", e) // 若是已到文件末尾,则直接结束 if e == io.EOF { break } } fmt.Print(readString) } fmt.Println("读取结束") }
简易的数据读取
func main() { bytes, err := ioutil.ReadFile("d:/kaka.txt") if err != nil { fmt.Println("读取失败,err=", err) return } else { contentStr := string(bytes) fmt.Println(contentStr) } }