golang标准库os包阐述

os包既是有os相关的操作,那么什么是os操作呢?我们都知道,os是系统的意思,那么os操作自然是系统操作了。其实我们可有类比成一些物理操作,比如说,我们需要打开一个文件,新建一个文件,新建目录,删除文件,删除目录等。这些操作都是比较耗时的,因为系统要和电脑的磁盘打交道,所以会浪费一下时间。

在学习之前我们需要了解一下文件相关的权限,我们在使用os包的时候,打开文件时会有需要写入文件权限,那么这个文件的权限到底是怎么回事呢?这些使我们必须要掌握的知识。

文件的权限分为:r 读、w 写、x 执行

三种权限分别用0 、1 来表示开关,0既是关,1既是开。

三种权限的顺序也是rwx的顺序,如果是100,就表示:可读,不可写,不可执行,那么对应的十进制数字就是4。010,表示不可读,可写,不可执行,对应十进制2。001表示只可执行。

那么可读,可写,可执行便是最高的权限了,二进制111,十进制7。

但是,我们传入的参数好像都是四位数,比如0777,0666。那么这是怎么回事呢?

首位0我们先不做解释,先解释777,这明显是十进制。

上面我们说了7是最高权限,三个7是因为,对应三种角色的权限。分别是:文件所有者,文件所属组用户,其他用户。777就表示这三种角色的权限都是最高权限。如果是741,意思就是第一个角色是最高权限,第二个角色只读权限,第三个角色只能执行权限。

那么自己思考一下,666是怎么回事呢?对应二进制 110,110,110,对应的三个角色的权限都是可读可写不可执行。

os包

讲完了权限,我们可以开始讲os包了。

os包提供了文件的打开,关闭,删除,重名名方法

func Create(name string) (file *File, err error)
Create采用模式0666(任何人都可读写,不可执行)创建一个名为name的文件,如果文件已存在会截断它(为空文件)。如果成功,返回的文件对象可用于I/O;对应的文件描述符具有O_RDWR模式。如果出错,错误底层类型是*PathError。

open方法

func Open(name string) (file *File, err error)
Open打开一个文件用于读取。如果操作成功,返回的文件对象的方法可用于读取数据;对应的文件描述符具有O_RDONLY模式。如果出错,错误底层类型是*PathError。
func OpenFile(name string, flag int, perm FileMode) (file *File, err error)
OpenFile是一个更一般性的文件打开函数,大多数调用者都应用Open或Create代替本函数。它会使用指定的选项(如O_RDONLY等)、指定的模式(如0666等)打开指定名称的文件。如果操作成功,返回的文件对象可用于I/O。如果出错,错误底层类型是*PathError。

rename

func Rename(oldpath, newpath string) error
Rename修改一个文件的名字,移动一个文件。可能会有一些个操作系统特定的限制。

remove

func Remove(name string) error
Remove删除name指定的文件或目录。如果出错,会返回*PathError底层类型的错误。
func RemoveAll(path string) error
RemoveAll删除path指定的文件,或目录及它包含的任何下级对象。它会尝试删除所有东西,除非遇到错误并返回。如果path指定的对象不存在,RemoveAll会返回nil而不返回错误。

这些都是比较常用的方法。

同时os包中提供了一个os.File的结构体。该结构体实现了io包中的reader,writer接口,所以可以直接可以用进行io操作来读写。

比如我们打开了一个文件,想读取文件中的全部内容,我们可以使用os.File自身实现的read方法也可以使用ioutil或者bufio包中的方法。

代码如下:

import(
"os"
"io/ioutil"
"bufio"
"log"
)

func test(){
    file,err:=os.Open("./hello.txt")    //返回的file是os.File类型
    if err != ni {
        log.Fatal(err)
    }
    b, err := ioutil.ReadAll(file)
	if err != nil {
		log.Fatal(err)
	}
	fmt.Println(string(b))
}

func test(){
    file,err:=os.Open("./hello.txt")    //返回的file是os.File类型
    if err != ni {
        log.Fatal(err)
    } 
    bufreader := bufio.NewReader(file)
	for {
		line, _, err := bufreader.ReadLine()
		if err == io.EOF {

			break
		}
		fmt.Println(string(line))
	}
}

知道这些,其他的基本也能理解了。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值