目录

一、常用读取文件的三种方式

(1)利用os和file原生操作读文件

(2)使用bufio读取文件

(3)使用ioutil读取文件

二、常用写文件的三种方式

(1)利用os和file原生操作写文件

(2)使用bufio写文件

(3)使用ioutil写文件

三、常用复制文件的四种方式

(1)利用os和file原生操作复制文件

(2)使用bufio读写操作来复制文件

(3)使用ioutil读写操作来复制文件

(4)io.copy()来复制

​四、其他操作

(1)指定断点位置读写文件

(2)***文件复制之断点续传***

(3)遍历文件夹


一、常用读取文件的三种方式

(1)利用os和file原生操作读文件

注意:以open打开的方式是只读的

(2)使用bufio读取文件

注意:默认缓冲区大小是4096,这里我们可以自定义缓冲区大小

(3)使用ioutil读取文件

注意:ioutil是一次性读取整个文件,不适用于大文件读写操作,可能发生内存泄漏

二、常用写文件的三种方式

(1)利用os和file原生操作写文件

OpenFile是一个更一般性的文件打开函数,大多数调用者都应用Open或Create代替本函数。它会使用指定的选项(如O_RDONLY等)、指定的模式(如0666等)打开指定名称的文件。

可指定选项【只读,只写,可读写,追加……】和模式【 ModePerm FileMode = 0777 // 覆盖所有Unix权限位】

下面列举了一些常用的 flag 文件处理参数:

  • O_RDONLY:只读模式打开文件;
  • O_WRONLY:只写模式打开文件;
  • O_RDWR:读写模式打开文件;
  • O_APPEND:写操作时将数据附加到文件尾部(追加);
  • O_CREATE:如果不存在将创建一个新文件;
  • O_EXCL:和 O_CREATE 配合使用,文件必须不存在,否则返回一个错误;
  • O_SYNC:当进行一系列写操作时,每次都要等待上次的 I/O 操作完成再进行;
  • O_TRUNC:如果可能,在打开时清空文件。

(2)使用bufio写文件

注意:bufio是写在缓冲区里面,一定要Flush,否则文件中没有数据

(3)使用ioutil写文件

三、常用复制文件的四种方式

(1)利用os和file原生操作复制文件

(2)使用bufio读写操作来复制文件

(3)使用ioutil读写操作来复制文件

(4)io.copy()来复制


四、其他操作

(1)指定断点位置读写文件

(2)***文件复制之断点续传***

如果在传输文件的过程中发生断电等情况,文件传输了一半后异常终止了,当恢复后不希望重新传输,而希望接着传输。

可创建一个临时文件用户保存当前已经传输的字节数,每次传输时先读取临时文件的记录。如传输完成则删除临时文件

//断点续传
func main() {srcFile := "D:/development/jetbrains/goland/workspace/src/Go-Player/hanru_package/a.jpg"distFile := "copy_"+srcFile[strings.LastIndex(srcFile, "/")+1:]tempFile := distFile + "temp.txt"file1, err := os.Open(srcFile)handelError(err)file2, err := os.OpenFile(distFile, os.O_CREATE|os.O_WRONLY, os.ModePerm)handelError(err)file3, err := os.OpenFile(tempFile, os.O_CREATE|os.O_RDWR, os.ModePerm) //可读可写handelError(err)defer file1.Close()defer file2.Close()defer file3.Close()//先读取临时文件中的数据,再seekfile3.Seek(0, io.SeekStart)bs := make([]byte, 100, 100)n1, err := file3.Read(bs)//handelError(err)countStr := string(bs[:n1])count, err := strconv.ParseInt(countStr, 10, 64)//handelError(err)//fmt.Println(count)//设置读,写的位置file1.Seek(count, io.SeekStart)file2.Seek(count, io.SeekStart)data := make([]byte, 1024, 1024)n2 := -1            //读取的数据量n3 := -1            //写出的数据量total := int(count) //读取的总量//复制文件for {n2, err = file1.Read(data)if err == io.EOF || n2 == 0 {fmt.Println("文件复制完毕:", total)file3.Close()//一旦复制完,就删除临时文件os.Remove(tempFile)break}n3, err = file2.Write(data[:n2])total += n3//将赋值的总量存储到临时文件中file3.Seek(0, io.SeekStart)file3.WriteString(strconv.Itoa(total))fmt.Println("已经复制了", total, "字节数据")//模拟断电if total > 5000 {panic("断电啦")}}
}func handelError(err error) {if err != nil {log.Fatal(err)}
}

第一次传输的时候,在其中模拟断电(panic),如下图所示,文件复制到  5120  字节时断电。后恢复,文件接着从5123字节开始复制,而不会从头开始复制~~

(3)遍历文件夹

golang之文件读写/复制/断点续传相关推荐

  1. Android U盘文件读写复制操作

    Android U盘文件读写复制操作 应用开发起因 一.U盘的拔插监听及读取U盘设备 二.读取文件列表 1.U盘文件列表读取 2.Storage文件列表读取 三.通过文件列表进入文件,进行文本文件的读 ...

  2. python第二十九课——文件读写(复制文件)

    自定义函数:实现文件复制操作有形参(2个) 没有返回值相似版(不用) def copyFile(src,dest):#1.打开两个文件:1个关联读操作,1个关联写操作fr=open(src,'rb') ...

  3. 让python飞:形象理解python os模块、内存硬盘、字节字符、文件读写复制

    Day08葫芦娃救爷爷 葫芦娃去救爷爷,在洞口遇到了一个小机器人.它对葫芦娃说,它是这个洞的管家(os模块管理目录和文件),并告诉葫芦娃这个洞的名字叫温豆思洞,简称牛头洞(# print(os.nam ...

  4. Golang的文件处理方式-常见的读写

    在 Golang 语言中,文件使用指向 os.File 类型的指针来表示的,也叫做文件句柄.注意,标准输入 os.Stdin 和标准输出 os.Stdout ,他们的类型都是 *os.File 哟.在 ...

  5. golang 文件操作 创建 读写 复制移动 权限 删除

    目录 介绍 基本操作 创建空文件 Truncate文件 得到文件信息 重命名和移动 删除文件 打开和关闭文件 检查文件是否存在 检查读写权限 改变权限.拥有者.时间戳 硬链接和软链接 读写 复制文件 ...

  6. python的文件读写,序列化,复制/删除目录,压缩/解压缩/列出压缩文件目录,计算CRC32和MD5

    import json import os import shutil import pickle import zlib import binascii import hashlib import ...

  7. java基础 day12-FileInputStream类,文件的复制,缓冲流,Propertes文件,xml文件读写,网络socket编程(构建TCP客户端),内部类

    FileInputStream类的其他常用方法() /**在project下新建temp文件,内容为abcdef*FileInputStream类的其他常用方法:* int available():返 ...

  8. 文件读写操作:把文件a.txt中的内容复制到文件b.txt中

    文件读写操作:把文件a.txt中的内容复制到文件b.txt中 package com.io.reader;import java.io.File; import java.io.FileNotFoun ...

  9. go语言中的读写操作以及文件的复制

    目录 一.文件读写 1.读取文件中的数据: 2.写出数据到本地文件: 二.文件复制 1.方法一:io包下的Read()和Write()方法实现 2.方法二:io包下的Copy()方法实现 3.方法三: ...

最新文章

  1. Java调用C/C++编写的第三方dll动态链接库(zz)
  2. python 测试字符串类型_【教程】如何用Python中的chardet去检测字符编码类型
  3. SQL基础【三、Select】
  4. C进阶指南(1):整型溢出和类型提升、内存申请和管理(转)
  5. 使用OpenCV-python实现手写数字识别
  6. C#网络编程(Socket编程)
  7. 机器人(RPA路程自动化)RPA流程自动化和AI的区别。
  8. 彻底禁止Win10自动更新工具Windows Update Blocker v1.5 汉化版
  9. 【ClearCase使用】之图解merge
  10. 计算机图学图形裁剪,计算机图形学——裁剪
  11. 制作学术PPT的注意事项如何制作模板(附模板下载链接)
  12. python 解压zip ,rar 文件及编译错误的解决方法
  13. 数据结构——查找与排序
  14. python可视化数据分析交互作用_R数据分析:双分类变量的交互作用作图
  15. Appium 按压元素进行滑动
  16. 销售——LPN(License Plate Number)
  17. mac pdf去水印_PDF水印工具for Mac-PDF水印工具Mac版下载 V1.7-PC6苹果网
  18. 痞子衡嵌入式:串行NOR Flash的页编程模式对于量产效率的影响
  19. Android事件分发之ACTION_CANCEL机制及作用
  20. 图书借阅管理系统微信小程序的开发 报告+开题报告+PPT+SSM项目源码及数据库文件+演示视频

热门文章

  1. 暗夜发光,独自闪耀,盘点网页暗黑模式(DarkMode)下的特效和动效,CSS3实现
  2. FatMouse‘s Trade 贪心算法
  3. 微信小程序 之 简答题
  4. OneNote使用数位板的时候无压力感应解决
  5. 代码实现 —— 基于 STM32 的可见光通信系统课程设计
  6. 杰理之微信语音使用耳机录音下,录音出来的语音开头有1s左右的滋滋声【篇】
  7. java jna java.lang.UnsatisfiedLinkError: Unable to load library Native library (win32-x86-64/C:\User
  8. leetcode刷题B部分
  9. Linux下实用工具Vim常用命令总结
  10. Rider的使用,c#开发利器