当前位置: 首页 > 科技观察

说说Go语言的文件操作

时间:2023-03-20 19:42:27 科技观察

常见的包文件操作应该是应用中很常见的操作了。无论何种应用场景,几乎都离不开文件的基本操作。Go语言提供了三种不同的包来处理文件。osos包提供了一个用于文件处理的API接口。它遵循Unix标准,独立于平台,可以被所有操作系统使用。错误处理是Go语言独有的。当发生故障时,返回错误类型而不是系统错误号,这对调试很有帮助。os包提供了创建、删除、开启、修改权限等功能。与I/O操作相关的包?ioI/O原语接口被封装成一个抽象功能的公共接口?ioutil?I/O实用函数,从Go1.6开始,相同的函数可以直接通过iopost-os包?bufio?文件的缓冲I/O接口?缓冲区实际上是内存中的一个临时空间,用来在这个空间存储数据和进行临时I/O操作,减少系统调用和磁盘I/O,适合针对数据块传输场景,不适合单字符I/O操作?默认操作为无缓冲普通文件/目录操作路径拼接包mainimport("fmt""path")funcJoinPath(){dirs:=[]string{"/","home","ray","workspace"}path:=path.Join(dirs...)fmt.Printf("加入后的路径:%v\n",path)}funcmain(){JoinPath()}输出信息为加入后的路径:/home/ray/workspace更多功能请参考:https://img.ydisp.cn/news/20230131/4svzqyj0bptdata-id="h6f20189-bjSgtXE4"id="h6f20189-bjSgtXE4">创建文件(touch)代码执行后会生成一个空的sample.txt文件packagemainimport("log""os")funcCreateEmptyFile(){myFile,err:=os.Create("sample.txt")iferr!=nil{log.Fatal("错误!",err)}log.Println("空文件创建成功。",myFile)myFile.Close()}funcmain(){CreateEmptyFile()}这里获取文件信息主要使用os.Stat函数包mainimport("fmt""log""os")funcFileInfo(){fileInfo,err:=os.Stat("sample.txt")iferr!=nil{log.Fatal(err)}fmt.Println("文件名:",fileInfo.Name())fmt.Println("Size",fileInfo.Size(),"bytes")fmt.Println("Permissions:",fileInfo.Mode())fmt.Println("Lastmodified:",fileInfo.ModTime())fmt.Println("IsDirectory:",fileInfo.IsDir())}funcmain(){FileInfo()}读取文件内容与其他语言类似。读取文件主要使用Open、Read等函数。文件处理的底层是在原有的基础之上抽象出来的,可以进一步构建更方便的接口packagemainimport("log""os")funcFileRead(filePathstring){oFile,err:=os.Open(filePath)iferr!=nil{log.Fatal(err)}deferoFile.Close()buff:=make([]byte,100)forno,err:=oFile.Read(buff);错误==无;no,err=oFile.Read(buff){ifno>0{os.Stdout.Write(buff[0:no])}}}funcmain(){FileRead("sample.txt")}写入文件内容我们尝试使用示例文件复制来学习如何编写,除了刚刚使用的os包,或使用io包,它最终会显示复制了多少字节packagemainimport("log""io""os")funcCopy(src,deststring){srcFile,err:=os.Open(src)iferr!=nil{log.Fatal(err)}defersrcFile.Close()destFile,err:=os.Create(dest)如果err!=nil{log.Fatal(err)}deferdestFile.Close()numBytes,err:=io.Copy(destFile,srcFile)iferr!=nil{log.Fatal(err)}log.Printf("成功已复制%d字节",numBytes)err=destFile.Sync()iferr!=nil{log.致命的(err)}}funcmain(){Copy("source.txt","dest.txt")}参考?关于文件操作的更多内容,使用过程中可以查看官方文档?Go语言文件操作(https://colobu.com/2016/10/12/go-file-operations/)