Go基础编程:文件操作
2018-01-17 16:09
453 查看
1 相关api介绍
1.1 建立与打开文件
新建文件可以通过如下两个方法:func Create(name string) (file *File, err Error) 根据提供的文件名创建新的文件,返回一个文件对象,默认权限是0666的文件,返回的文件对象是可读写的。 func NewFile(fd uintptr, name string) *File 根据文件描述符创建相应的文件,返回一个文件对象
通过如下两个方法来打开文件:
func Open(name string) (file *File, err Error) 该方法打开一个名称为name的文件,但是是只读方式,内部实现其实调用了OpenFile。 func OpenFile(name string, flag int, perm uint32) (file *File, err Error) 打开名称为name的文件,flag是打开的方式,只读、读写等,perm是权限
1.2 写文件
func (file *File) Write(b []byte) (n int, err Error) 写入byte类型的信息到文件 func (file *File) WriteAt(b []byte, off int64) (n int, err Error) 在指定位置开始写入byte类型的信息 func (file *File) WriteString(s string) (ret int, err Error) 写入string信息到文件
1.3 读文件
func (file *File) Read(b []byte) (n int, err Error) 读取数据到b中 func (file *File) ReadAt(b []byte, off int64) (n int, err Error) 从off开始读取数据到b中
1.4 删除文件
func Remove(name string) Error 调用该函数就可以删除文件名为name的文件
2 示例代码
2.1 写文件
package main import ( "fmt" "os" ) func main() { fout, err := os.Create("./xxx.txt") //新建文件 //fout, err := os.OpenFile("./xxx.txt", os.O_CREATE, 0666) if err != nil { fmt.Println(err) return } defer fout.Close() //main函数结束前, 关闭文件 for i := 0; i < 5; i++ { outstr := fmt.Sprintf("%s:%d\n", "Hello go", i) fout.WriteString(outstr) //写入string信息到文件 fout.Write([]byte("abcd\n")) //写入byte类型的信息到文件 } }
xxx.txt内容如下:
2.2 读文件
func main() { fin, err := os.Open("./xxx.txt") //打开文件 if err != nil { fmt.Println(err) } defer fin.Close() buf := make([]byte, 1024) //开辟1024个字节的slice作为缓冲 for { n, _ := fin.Read(buf) //读文件 if n == 0 { //0表示已经到文件结束 break } fmt.Println(string(buf)) //输出读取的内容 } }
3 案例:拷贝文件
示例代码:package main import ( "fmt" "io" "os" ) func main() { args := os.Args //获取用户输入的所有参数 //如果用户没有输入,或参数个数不够,则调用该函数提示用户 if args == nil || len(args) != 3 { fmt.Println("useage : xxx srcFile dstFile") return } srcPath := args[1] //获取输入的第一个参数 dstPath := args[2] //获取输入的第二个参数 fmt.Printf("srcPath = %s, dstPath = %s\n", srcPath, dstPath) if srcPath == dstPath { fmt.Println("源文件和目的文件名字不能相同") return } srcFile, err1 := os.Open(srcPath) //打开源文件 if err1 != nil { fmt.Println(err1) return } dstFile, err2 := os.Create(dstPath) //创建目的文件 if err2 != nil { fmt.Println(err2) return } buf := make([]byte, 1024) //切片缓冲区 for { //从源文件读取内容,n为读取文件内容的长度 n, err := srcFile.Read(buf) if err != nil && err != io.EOF { fmt.Println(err) break } if n == 0 { fmt.Println("文件处理完毕") break } //切片截取 tmp := buf[:n] //把读取的内容写入到目的文件 dstFile.Write(tmp) } //关闭文件 srcFile.Close() dstFile.Close() }
运行结果:
4 参考资料
https://github.com/astaxie/build-web-application-with-golang/blob/master/zh/07.5.md相关文章推荐
- Linux基础编程-文件操作open,lseek,read,write,close
- 【C++学习笔记】文件操作编程基础
- windows基础应用程序编程(十二)文件操作
- java文件操作大全-Java基础-Java-编程开发
- Linux基础编程-文件操作open,lseek,read,write,close
- Linux基础编程-文件操作open,lseek,read,write,close
- VC编程基础:文件和文件夹操作
- Go基础--终端操作和文件操作
- linux 基础编程:文件操作总结
- 【API】文件操作编程基础-CreateFile、WriteFile、SetFilePointer
- 系统编程中的基础文件操作
- UG OPEN API编程基础 4部件文件的相关操作
- C语言编程基础-14文件位置指针 宏操作 多文件编程
- 通过培训学到的一个java的基于线程,网络编程等的文件多线程断点下载器(断点功能还在操作实践中)
- 文件操作04 - 零基础入门学习C语言63
- python--编程基础--文件
- Go语言下的文件读写操作
- Python语法基础(四)匿名函数、文件操作
- Android基础笔记一之测试与文件操作
- Go基础编程:延迟调用defer