Go 语言IO操作(文件&文件内容增、删、改、查、复制。。。)

在计算机中的一切都是以二进制流的方式存在的,Go语言进行I/O操作的时候是以文件的的指针*file进行操作的。I/O操作我需要使用到os这个内置包。

1、读取文件信息:Read

2、向文件中写入数据:Write

3、读取文件信息:FileInfo

package main

import (
	"fmt"
	"log"
	"os"
)

func main() {
	fileinfo, err := os.Stat("文件路径")
	if err != nil {
		log.Println("获取文件信息失败")
	}

	fmt.Println(fileinfo.Name())  // 获取文件名称
	fmt.Println(fileinfo.Size())  // 获取文件大小
	fmt.Println(fileinfo.Mode())  // 获取文件权限
	fmt.Println(fileinfo.IsDir()) // 判断是否文件夹
}

 创建目录

mkdir / 权限

mkdirAll 创建层级目录

remove 删除目录

removeAll 强制删除目录

package main

import (
	"fmt"
	"log"
	"os"
)

func main() {

    // 绝对路径创建文件夹,会返回一个err
	err := os.Mkdir("C:\\Users\\123\\Desktop\\test", os.ModePerm)
	if err != nil {
		log.Println("文件夹创建失败")
	}
	fmt.Println("文件夹创建成功")

	// 绝对路径创建层级文件夹
	err = os.MkdirAll("C:\\Users\\123\\Desktop\\test\\test1\\test2\\test3", os.ModePerm)
	if err != nil {
		log.Println("文件夹创建失败")
	}
	fmt.Println("文件夹创建成功")

	// 删除单层文件夹
	err = os.Remove("C:\\Users\\123\\Desktop\\test\\test1")
	if err != nil {
		fmt.Println(err)
		//return
	}
	fmt.Println("file delete success!!")

	// 如果存在多层文件,removeAll,相对来说比较危险,删除这个目录下的所有东西, 强制删除
	err = os.RemoveAll("C:\\Users\\123\\Desktop\\test\\test1")
	if err != nil {
		fmt.Println(err)
		return
	}
	fmt.Println("file delete success!!")
}

创建文件

os.create(),若存在就是打开-返回的这个file对象.  如果不存在,创建在打开

package main

import (
	"fmt"
	"os"
)

func main() {
	// 创建文件  Create
	// func Create(name string) (*File, error) {
	// 返回的file对象就是我们的文件
	file, err := os.Create("aaa.go") // 相对路径

    // 我们习惯于在建立连接时候通过defer来关闭连接,保证程序不会出任何问题,或者忘记关闭
	defer file.Close()

	if err != nil {
		fmt.Println(err)
	}
	fmt.Println(file)
}

 IO动作介绍

  • O_RDONLY: 以只读方式打开文件。文件指针可定位于文件的任意位置。当尝试写入时,会返回错误。

  • O_WRONLY: 以只写方式打开文件。即使文件已存在,它也会被截断为零长度,除非同时使用了 O_APPEND 标志。文件指针总是在文件的开始位置。

  • O_RDWR: 以读写方式打开文件。文件指针可定位于文件的任意位置。同时具有读写能力。

除了这三个主要的模式,还有其他几个常量可以与它们组合使用,以修改文件打开的行为:

  • O_APPEND: 设置文件指针于文件末尾。所有写入操作都会在文件末尾添加数据,而不是覆盖现有内容。

  • O_CREATE: 如果文件不存在,则创建一个新文件。与 O_TRUNC 结合使用时,可以创建一个新文件或截断(清空)一个已存在的文件。

  • O_EXCL: 与 O_CREATE 一起使用时,确保文件不存在。如果文件已存在,打开操作将失败。

  • O_SYNC: 开启文件的同步 I/O 模式,即每次写入操作都将导致物理磁盘操作,以确保数据确实写入磁盘。

  • O_TRUNC: 如果文件存在且为打开用于写入,则截断文件至零长度。

IO读

1、IO读可以使用os.open()和os.openfile(),其中os.openfile可以设置文件读写的权限 

package main

import (
	"fmt"
	"os"
)

// IO读
func main() {
	// 我们习惯于在建立连接时候通过defer来关闭连接,保证程序不会出任何问题,或者忘记关闭
	defer file1.Close()
	defer file2.Close()

	// func Open(name string) (*File, error)
	file1, err := os.Open("aaa.txt") //在相对路径找
	if err != nil {
		fmt.Println(err)
	}
	fmt.Println(file1)
	// file 类-- 指定的对象
	// 打开文件的时候,选定权限:可读可写的方式打开
	// OpenFile(文件名,打开方式:可读、可写...,FileMode , 权限)
	file2, err2 := os.OpenFile("aaa.txt",os.O_RDWR, os.ModePerm)
	if err2 != nil {
		fmt.Println(err2)
	}
	fmt.Println(file2)
}

2、读取  file.Read([]byte)  ,将file中的数据读取到  []byte 中, n,err  n读取到的行数,err 错误,EOF错误,就代表文件读取完毕了

package main

import (
	"fmt"
	"os"
)

// 读取文件数据
func main() {
	// 建立连接
	file, _ := os.Open("a
  • 28
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值