看了下go语言的标准库,最开始看了下io库想着看看go语言提供的函数如何实现文件的读写,粗略的看了下就想着使用go语言提供的方法读写文件试下吧。 读文件,示例:
package mainimport ( "fmt" "io/ioutil" "os")const ( FILE = "./test.txt")//Read filefunc main(){ fd,err := os.Open(FILE) //打开文件 if err != nil{ fmt.PRintln("open file error") } defer fd.Close() len,err := fd.Seek(0,2)//获取文件长度 if err != nil{ fmt.Println("get len error") } strbyte := make([]byte,len) fd.Seek(0,0) //移回指针到文件开头 fd.Read(strbyte) //读文件 fmt.Println(string(strbyte)) dat,err := ioutil.ReadFile(FILE) //直接读文件 if err != nil{ fmt.Println("Read file err") } fmt.Println(string(dat))}按照C语言的方式进行了文件的读写后,才发现Go语言提供了更方便的方法使用ioutil库中的ReadFile函数可直接读取函数。 写文件,示例:
//write filefunc main(){ dstr := []byte("this is a test") err := ioutil.WriteFile(FILE,dstr,0777) if err != nil{ fmt.Println("write file err") } dstr := []byte("this is a test") fd,err := os.OpenFile(FILE,os.O_APPEND,0777) if err != nil{ fmt.Println("open file error") } defer fd.Close() num,err := fd.Write(dstr) if err != nil{ fmt.Println(err) } fmt.Println(num)}同样Go语言也提供了WriteFile函数直接写文件,但是在使用C的方式写文件的时候与C语言有一些小的差别。我们知道C语言在写文件时在使用open函数打开文件获取文件句柄时只需要两个参数(文件名,权限)而在Go语言中使用Open函数打开文件只有读的权限。然而我们可以使用os.OpenFile函数打开文件并附权限。Go语言还提供了Create函数创建可写文件。Create采用模式0666(任何人都可读写,不可执行)创建一个名为name的文件,如果文件已存在会截断它(为空文件)。如果成功,返回的文件对象可用于I/O;对应的文件描述符具有O_RDWR模式。 权限说明: O_RDONLY int = syscall.O_RDONLY // 只读 O_WRONLY int = syscall.O_WRONLY // 只写 O_RDWR int = syscall.O_RDWR // 读写 O_APPEND int = syscall.O_APPEND // 在文件末尾追加,打开后cursor在文件结尾位置 O_CREATE int = syscall.O_CREAT // 如果不存在则创建 O_EXCL int = syscall.O_EXCL //与O_CREATE一起用,构成一个新建文件的功能,它要求文件必须不存在 O_SYNC int = syscall.O_SYNC // 同步方式打开,没有缓存,这样写入内容直接写入硬盘,系统掉电文件内容有一定保证 O_TRUNC int = syscall.O_TRUNC // 打开并清空文件 ioutil.WriteFile函数向filename指定的文件中写入数据。如果文件不存在将按给出的权限创建文件,否则在写入数据之前清空文件。 权限说明:
const ( // The single letters are the abbreviations // used by the String method's formatting. ModeDir FileMode = 1 << (32 - 1 - iota) // d: is a directory ModeAppend // a: append-only ModeExclusive // l: exclusive use ModeTemporary // T: temporary file (not backed up) ModeSymlink // L: symbolic link ModeDevice // D: device file ModeNamedPipe // p: named pipe (FIFO) ModeSocket // S: Unix domain socket ModeSetuid // u: setuid ModeSetgid // g: setgid ModeCharDevice // c: Unix character device, when ModeDevice is set ModeSticky // t: sticky // Mask for the type bits. For regular files, none will be set. ModeType = ModeDir | ModeSymlink | ModeNamedPipe | ModeSocket | ModeDevice ModePerm FileMode = 0777 // Unix permission bits)新闻热点
疑难解答