文件复制(Go语言实现)

go语言实现递归复制文件夹 (附完整源码) 阅读详情
在这里插package main

import (
	"fmt"
	"io"
	"os"
	"strconv"
	"time"
)

type MyCopy struct{}

func NewMyCopy() *MyCopy {
	return new(MyCopy)
}

//保存上次文件读取到的位置
var last string = "./last"

/**
* 功能:文件复制(支持断点续传)
* Seek(offset int64, whence int) (ret int64, err error) 表示设置当前光标的位置
* offset int,设置多个字节
* whence int,从哪开始 0->距离文件开头 1->当前位置 2->距离文件末尾
*
 */
func (c *MyCopy) CopyFile(dstFile, srcFile string) (int, error) {
	src, err := os.Open(srcFile)

	if err != nil {
		fmt.Println("open srcFile failed: %v", err)
		return -1, err
	}

	des, err := os.OpenFile(dstFile, os.O_CREATE|os.O_WRONLY, 0775)
	if err != nil {
		fmt.Println("open desFile failed: %v", err)
		return -1, err
	}

	defer src.Close()
	defer des.Close()

	lastPos := c.GetLastPosition()
	position := 0

	if lastPos > 0 {
		src.Seek(int64(lastPos), io.SeekStart) //0
		des.Seek(int64(lastPos), io.SeekStart) //0
		position = lastPos
	}

	fmt.Printf("当前读取位置为:%d\n", position)
	var buf [128]byte

	for {

		count, err := src.Read(buf[:])
		if err == io.EOF {
			os.Remove(last) //文件拷贝结束,删除记录内容
			break
		}

		if err != nil {
			fmt.Printf("read file context failed:%v\n", err)
			break
		}

		position += count
		fmt.Printf("copy cap:%d\r", position)
		time.Sleep(100 * time.Millisecond) //模拟网络延迟
		des.Write(buf[:count])
		c.WritePosition([]byte(fmt.Sprintf("%d", position)))
		/*
			if position == 10 {
				fmt.Println("模拟中断传输")
				break
			}*/
	}
	fmt.Println("end============================================================")
	return position, nil
}

/*
 获取上次断点位置
*/
func (c *MyCopy) GetLastPosition() int {
	file, err := os.Open(last)

	if err != nil {
		return -1
	}

	defer file.Close()

	var buff [128]byte

	n, err := file.Read(buff[:])
	if err != nil {
		fmt.Println("Read lastfile failed: ", err)
		return -1
	}

	v, err := strconv.Atoi(string(buff[0:n]))
	if err != nil || v < 0 {
		fmt.Println("Atoi error")
		return -1
	}

	return v
}

/**
* 写入当前读取到位置
 */
func (c *MyCopy) WritePosition(v []byte) {
	//Write(b []byte) (n int, err error)
	file, err := os.OpenFile(last, os.O_CREATE|os.O_TRUNC|os.O_WRONLY, 0666)
	if err != nil {
		fmt.Printf("write last position to failed:%v\n", err)
		return
	}
	file.Write(v)
	defer file.Close()
}

func main() {j
	c := NewMyCopy()
	c.CopyFile("a.txt", "employer.go")
}
入代码片

从理论到实践:TRL去嵌入校准在国产矢量网络分析仪上的应用全解析 本文全面解析了TRL去嵌入校准技术在国产矢量网络分析仪上的应用实践,从核心算法到工程实现。详细介绍了TRL校准的数学原理、国产VNA的程控接口开发、校准件质量评估及测量不确定度控制策略,帮助工程师掌握高频器件测量的关键技术。 阅读详情

相关推荐

伺服电机入门01

编码器输出 旋转信号 , 接收端: 使用ADC 捕捉旋转信号 ,转成数字信号,驱动器得到数字处理, 因为信号量是模拟信号, mcu mpu 等芯片通常内部处理是数字,通过adc 得到数字cpu 才能识别 传输过来的pos 等信息。IPM 芯片示例, IRAM256A 这个芯片已经停产,有换新的,,下面示例来自stmbl 高功率方案,4 步进电机 有全步控制,半步控制 ,微步控制,FOC控制,步进电机也是可以做伺服系统的。以下面几种信号是可以细分,也就是通过细分增加编码器的分辨率,

qq_25160559的博客 969

Go实现文件复制、移动(cp、mv命令)

go语言实现文件复制、移动(cp、mv命令)

空山新雨后,天气晚来秋 3267

[语义分割]SPP、空洞卷积与ASPP总结

ASPP全称:Atrous Spatial Pyramid Pooling,中文可以理解为空洞空间卷积池化金字塔或者多孔空间金字塔池化。在这其中,要理解两个概念:一个是SPP,池化金字塔结构或者叫空间金字塔池化层,都是一个东西;另一个是Atrous,空洞卷积,两个加在一起就是ASPP。 首先说一下SPP:Spatial Pyramid Pooling。这个结构出自于论文《Spatial Pyramid Pooling in Deep Convolutional Networks for Visual Re

lipengfei0427的博客 2万+

golang移动文件

golang移动文件正确写法

weicaijiang的专栏 930

【机器人】转动的指数坐标表示心得理解

转动的指数坐标表示心得理解1.前言2.指数坐标表示旋转矩阵3.原理推导4.矩阵对数、矩阵指数 1.前言 最近因为项目需求,又学习了一点机器人学的东西,参考书籍为《现代机器人学》,该书采用指数坐标、旋量的方式来对机器人进行描述和运动学、动力学建模,让我对机器人有了更深的理解,也是弥补DH参数建模复杂的缺陷,虽然DH法只用4个参数,而旋量需要更多,但是它骚啊! 本文是我学习了转动的指数坐标表示的一个心得体会,如有问题请多多包涵。 2.指数坐标表示旋转矩阵 指数坐标可以用来表示求解旋转矩阵,其原理非常简单巧妙,需

要恰饭得嘛 2328

实战指南 | Adjust 与 Facebook、Google Ads 自归因配置全流程解析

本文详细解析了Adjust与Facebook、Google Ads自归因配置的全流程,帮助移动应用出海推广者解决广告归因难题。通过自归因功能(SAN),开发者可以获取更准确的数据、简化配置流程并扩大安装来源覆盖,显著提升广告效果监测和ROI计算效率。

weixin_42528780的博客 536

Go 文件操作基本方法大全

在Go语言中,操作文件主要依赖于标准库中的os和io/ioutilio/ioutil在Go 1.16及以后版本中被逐步弃用,推荐使用io和os包中的函数进行替代)以及io和bufio等包。

BOBO博客 1296

自监督学习与上下文赌博机融合:视觉决策中的协同优化与实战指南

在机器学习领域,自监督学习(Self-Supervised Learning)通过设计前置任务从无标注数据中学习通用表征,已成为解决标注数据稀缺问题的关键技术。其核心原理是利用数据自身的结构生成监督信号,训练编码器提取鲁棒特征。上下文赌博机(Contextual Bandits)作为强化学习的简化分支,专注于在给定上下文信息下做出单步最优决策,平衡探索与利用,广泛应用于推荐系统、广告投放等场景。将两者结合,构建端到端的协同训练框架,能让视觉表征的优化直接服务于最终的决策目标,同时利用自监督任务作为正则化项提

weixin_33721344的博客 520

通过示例学习 Go 语言 2023(二十三)

在 Go (Golang) 中将文件从一个位置移动到另一个位置或使用命令 mv 来源:golangbyexample.com/move-file-from-one-location-to-another-golang/ os.Rename() 函数可用于在不同位置之间移动文件。它相当于 Linux 的命令 ‘mv’。以下是该函数的签名 func Rename(oldpath, newpath string) error 代码: package main import ( "log"

龙哥盟 1207

STorM BGC V1.31硬件+SimpleBGC固件:从零搭建三轴云台开发环境(Keil+JLink避坑指南)

本文详细介绍了如何从零搭建STorM BGC V1.31硬件+SimpleBGC固件的三轴云台开发环境,涵盖硬件连接、Keil+JLink开发工具配置、固件编译与烧录等关键步骤,并提供了常见问题的解决方案和调试技巧,帮助开发者快速上手三轴云台开发。

weixin_28693683的博客 380

第一章 EB安装

1.DemoWorkspace 是基于EB当前组件配置下的例程,包含了启动文件和中断服务函数以及组件demo。2.Mclsar 下存放的是EB的插件包和静态MCAL的驱动文件。

舊梦的博客 1955

golang 文件 文件夹 创建 读取 移动 复制 写入 遍历

目录 文件读取 创建 写入移动 拷贝 删除 文件 创建文件夹 文件覆盖判断 遍历文件夹 权限 文件操作, 大体分为两部分: os库 : 文件\文件夹创建,读取,移动,复制 io库 : 文件内容的写入,修改,拼接 文件读取 package main import ( "io/ioutil" "log" ) func main() { // 读取文件内容 file, _ := os.OpenFile("./demo_unicode.html", 2, .

whatday的专栏 8221

热力学仿真软件:ANSYS CFX_(15).旋转机械仿真

创建旋转域在中选择需要设置为旋转域的区域。选择选项。设置旋转速度在设置中,指定旋转速度(单位为弧度/秒)。也可以选择选项,并输入具体值。设置旋转轴在设置中,指定旋转轴的方向和位置。通常旋转轴的方向可以使用单位向量来表示,例如[0, 0, 1]表示沿Z轴旋转。旋转轴的位置可以通过指定一个点的坐标来确定,例如[0, 0, 0]表示旋转轴通过原点。旋转机械的仿真在ANSYS CFX中是一个复杂但重要的过程。

kkchenjj的博客 1157

go 语言实现文件复制

go 语言个人感觉,简洁,实用,强大,从语言层面上实现高并发,适用于高并发的服务器。看了很多博客,开源项目,文章,自己也开始分享所学的东西分享出来,后续将推出更多的go语言博客,希望go语言应用更广泛,可以帮助更多的人。下面是实现go语言的文件的复制,go语言生成可执行程序,异常的方便。1. 开发环境go LiteIDE2. 步骤2.1 新建目标文件夹,用于存放源文件,我的存放路径 E:\work...

lping985的博客 1118

STM32F407中文手册

STM32f407中文手册 本参考手册面向应用开发人员,提供有关使用 STM32F405xx/07xx、STM32F415xx/17xx、 STM32F42xxx 和 STM32F43xxx 微控制器存储器与外设的完整信息。STM32F405xx/07xx、STM32F415xx/17xx、STM32F42xxx 和 STM32F43xxx 构成一个微 控制器系列,各产品具有不同的存储器大小、封装和外设。有关订购信息以及器件的机械与电气特性,请参见数据手册。有关 ARM Cortex™-M4F 内核的信息,请参见《Cortex™-M4F 技术参考手册》。

RU DOS版、EFI版32bit/64bit BIOS常用工具

DOS版、EFI版的RU工具,可用来查看IO、MEM、PCI、SMBIOS等资源。亲测在EFI SHELL下可用。

使用Go语言实现文件的复制

import ("bufio"//缓存"fmt""io""os"

m0_74201718的博客 487

复分析 阿尔福斯(Ahlfors) 第三版答案 英文

答案分为十章,有部分习题没有答案,全英文复分析阿尔福斯(Ahlfors) 第三版答案

go语言,将已有的文件复制一份,同时重新命名实现方法

基本的思路: (1)让用户输入要拷贝的文件的名称(源文件)以及目的文件的名称 (2)创建目的文件 (3)打开源文件,并且读取该文件中的内容 (4)将从源文件中读取的内容写到目的文件中 实现代码: var srcFileName string var dstFileName string fmt.Printf("请输入源文件名称:") fmt.Scan(&srcFileNa...

每一个不曾起舞的日子,都是对生命的辜负 1316

Devexpress16.2.6破解工具

Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具

input禁止后怎么实现复制功能_GO语言基础进阶教程:文件复制

在io包中主要是操作流的一些方法,今天主要学习一下copy。就是把一个文件复制到另一个目录下。它的原理就是通过程序,从源文件读取文件中的数据,在写出到目标文件里。一、方法一:io包下的Read()和Write()方法实现我们可以通过io包下的Read()和Write()方法,边读边写,就能够实现文件的复制。这个方法是按块读取文件,块的大小也会影响到程序的性能。} /* 该函数的功能:实现文件的拷贝...

weixin_27945229的博客 172

Go语言实战案例-复制文件内容

本案例将实现一个实用的文件操作工具:将一个文件的内容完整复制到另一个文件中。这是文件处理中的常见任务,比如配置文件备份、日志迁移、用户上传文件转存等。

tenkofx的博客 521

go文件复制

go copy使用

weixin_43946021的博客 451

go语言-文件夹复制

go语言-文件夹复制 package main import ( // "flag" "fmt" "io" "os" "path/filepath" "strings" ) func main() { // flag.Parse() // root := flag.Arg(0) //getFilelist("E:/STUDY") copyDir("E:\\STUDY",

暗夜安全专题 5105

Go语言实现的高效并发文件复制工具cptX:原理、性能与实战调优

文件复制是系统管理与开发中的基础操作,其性能直接影响数据处理效率。传统工具如cp命令采用单线程顺序执行,在面对海量小文件或大文件传输时,易成为I/O瓶颈。通过引入并发编程模型,可将复制任务分解为多个并行执行的子任务,充分利用多核CPU与高IOPS存储设备的硬件能力,从而显著提升吞吐量。在工程实践中,Go语言凭借其轻量级goroutine和channel机制,成为实现高并发文件操作的理想选择,能有效管理任务调度与资源竞争。cptX正是基于这一技术栈构建的增强型复制工具,它通过生产者-消费者模型与工作池机制,智

weixin_28745975的博客 338

Golang实现文件复制

【代码】Golang实现文件复制。

未来已来,AI时代,学AI编程,做AI量化,就来大鹏AI教育。 910

Go语言中的`io.Copy`函数:高效的数据复制解决方案

io.Copy函数是Go语言标准库中的一个核心功能,它主要用于在不同的I/O资源之间高效地复制数据。dst:目标写入器,用于接收源数据。src:源读取器,用于提供数据。返回值:复制的字节数和可能的错误。io.Copy函数的核心在于它能够自动处理缓冲区管理,这意味着在复制大量数据时,您不必担心内存溢出的问题。它会持续复制直到源中的数据全部读取完毕或发生错误,并返回复制的字节数和可能的错误。

蜗牛沐雨 1592

go语言基础 断点续传

我们可以利用读写来复制文件,也可以在复制的同时,再新建一个临时文件保存读写的进度,如果有意外发生,我们还可以通过临时文件中的进度,来继续复制文件package main import ( "os" "fmt" "strconv" "io" ) func main() { /* 思路:断点续传,边复制,边记录复制的数据量 */ srcName:...

超级系博客 1805

golang_文件操作04: 文件复制

文件复制 import ( "fmt" "io" "os" ) func main() { file1, err1 := os.Open("D:\\face.jpg") //打开文件(源文件) file2, err2 := os.Create("E:\\face.jpg") //创建文件(目标文件) defer file1.Close() defer file2.Close()...

Grayan的博客 413
上一篇: Go语言认知
下一篇: 新的语言新的方向,未来到底指向何方?
恩嗯
博客等级 码龄8年 47粉丝 112原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值