【GO】文件读写:打开关闭+打开模式+文件权限+文件读取

简介: 【GO】文件读写:打开关闭+打开模式+文件权限+文件读取

屏幕快照 2022-05-18 下午8.19.30.png

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这个时候不要打开文件直接复制文件路径,会报一个文件目录的错误


The filename, directory name, or volume label syntax is incorrect.


在打开文件的路径必须自己手动输入,因为编码有问题


打开文件也必须关闭文件,所以在任何时候打开一个文件操作后使用延迟执行的defer来进行关闭文件


defer是延迟执行的关键词,在所有程序都执行完才会执行的代码


文件打开模式


  • 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写过的,就不在继续讨论了。


文件读取

屏幕快照 2022-05-18 下午8.20.20.png

image.png

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("读取结束")
}

屏幕快照 2022-05-18 下午8.20.49.png

func main() {
  bytes, err := ioutil.ReadFile("d:/kaka.txt")
  if err != nil {
    fmt.Println("读取失败,err=", err)
    return
  } else {
    contentStr := string(bytes)
    fmt.Println(contentStr)
  }
}
相关文章
|
5月前
|
Go
Go 语言为什么不支持并发读写 map?
Go 语言为什么不支持并发读写 map?
|
5月前
|
缓存 NoSQL Go
通过 SingleFlight 模式学习 Go 并发编程
通过 SingleFlight 模式学习 Go 并发编程
|
2月前
|
Go 调度 开发者
探索Go语言中的并发模式:goroutine与channel
在本文中,我们将深入探讨Go语言中的核心并发特性——goroutine和channel。不同于传统的并发模型,Go语言的并发机制以其简洁性和高效性著称。本文将通过实际代码示例,展示如何利用goroutine实现轻量级的并发执行,以及如何通过channel安全地在goroutine之间传递数据。摘要部分将概述这些概念,并提示读者本文将提供哪些具体的技术洞见。
|
2月前
|
Unix Linux Go
go进阶编程:Golang中的文件与文件夹操作指南
本文详细介绍了Golang中文件与文件夹的基本操作,包括读取、写入、创建、删除和遍历等。通过示例代码展示了如何使用`os`和`io/ioutil`包进行文件操作,并强调了错误处理、权限控制和路径问题的重要性。适合初学者和有经验的开发者参考。
|
2月前
|
算法 大数据 Go
Go文件操作:掌握Go的文件读写与操作技巧
本文介绍了Go语言的文件操作功能,包括文件的打开、读写和关闭。Go语言通过`os`和`io`包提供了丰富的文件操作接口,使开发者能够轻松实现文件的读写和管理。文章详细讲解了核心概念、具体操作步骤和代码示例,并探讨了实际应用场景和未来发展趋势。
|
2月前
|
存储 前端开发 Go
Go 文件的读取操作
本文介绍了 Go 语言标准库中的 `os` 包和 `bufio` 包,重点讲解了 `os` 包中的 `Open` 和 `OpenFile` 函数及 `File` 结构体的 `Read` 方法,以及 `bufio` 包中的 `NewReader` 函数和 `Reader` 结构体的 `ReadString` 方法。通过示例代码展示了如何使用这些方法高效读取文件,减少磁盘操作。
|
3月前
|
安全 Go 调度
探索Go语言的并发模式:协程与通道的协同作用
Go语言以其并发能力闻名于世,而协程(goroutine)和通道(channel)是实现并发的两大利器。本文将深入了解Go语言中协程的轻量级特性,探讨如何利用通道进行协程间的安全通信,并通过实际案例演示如何将这两者结合起来,构建高效且可靠的并发系统。
|
3月前
|
安全 Go 开发者
破译Go语言中的并发模式:从入门到精通
在这篇技术性文章中,我们将跳过常规的摘要模式,直接带你进入Go语言的并发世界。你将不会看到枯燥的介绍,而是一段代码的旅程,从Go的并发基础构建块(goroutine和channel)开始,到高级模式的实践应用,我们共同探索如何高效地使用Go来处理并发任务。准备好,让Go带你飞。
|
3月前
|
存储 Go 文件存储
M.2移动硬盘打造Win To Go系统:高效分区存储文件全攻略
【10月更文挑战第12天】本文详细介绍了如何使用M.2移动硬盘制作Win To Go系统。首先,需准备合适容量与接口类型的M.2硬盘及硬盘盒,并获取Windows镜像文件和分区工具。接着,通过Rufus软件将镜像写入硬盘。文中还提供了分区策略,包括系统分区(约80-120GB)、软件分区(根据需求设定)和数据分区(剩余空间),并指导如何使用DiskGenius或Windows自带工具进行分区。最后,强调了对各分区文件的有效管理和定期备份的重要性。
211 3
|
3月前
|
存储 固态存储 Go
M.2移动硬盘打造Win To Go系统:高效分区存储文件全攻略
【10月更文挑战第11天】Win To Go 是一种将 Windows 系统安装在 M.2 移动硬盘上的技术,便于用户携带自定义系统跨设备使用。需准备高性能 M.2 硬盘及合适硬盘盒,并使用 DiskGenius 或 Rufus 进行分区与系统安装。系统分区用于安装 Windows,其余分区可根据需求存储工作或娱乐文件,便于管理和备份。
267 2