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

目录

复制文件

方式1:通过内置包文件操作实现

方式2:通过exec包实现

移动文件

方式1:通过内置包文件操作实现

方式2:通过exec包实现

提示


复制文件

方式1:通过内置包文件操作实现

func CopyFile(src, dst string) (size int64, err error) {fmt.Printf("ready copy '%s' to '%s'\n", src, dst)srcFile, err := os.OpenFile(src, os.O_RDONLY, 0644)if err != nil {err = fmt.Errorf("failed to open source file: %v", err)return}defer srcFile.Close()info, err := srcFile.Stat()if err != nil {err = fmt.Errorf("failed to get file info: %v\n", err)return}size = info.Size()if info.IsDir() {err = fmt.Errorf("source is a directory, does not support copying directories recursively.")return}dstFile, err := createFile(dst, info)if err != nil {err = errors.New(fmt.Sprintf("failed to create destination file: %v", err))return}defer dstFile.Close()_, err = io.Copy(dstFile, srcFile)if err != nil {err = fmt.Errorf(fmt.Sprintf("failed to copy file: %v\n", err))return}fmt.Printf("successfully copied '%s' to '%s'\n", src, dst)return
}func createFile(dst string, info os.FileInfo) (*os.File, error) {dir := filepath.Dir(dst)err := os.MkdirAll(dir, os.ModePerm)if err != nil {return nil, fmt.Errorf("failed to create destination directory: %w", err)}dstFile, err := os.Create(dst)if err != nil {return nil, fmt.Errorf("failed to create destination file: %w", err)}err = dstFile.Chmod(info.Mode())if err != nil {dstFile.Close()return nil, fmt.Errorf("failed to set destination file permissions: %w", err)}return dstFile, nil
}

方式2:通过exec包实现

封装执行简单命令的函数:

func Exec(name string, args ...string) (outString string, err error) {var out bytes.Buffervar stderr bytes.Buffercmd := exec.Command(name, args...)cmd.Stdout = &outcmd.Stderr = &stderrerr = cmd.Run()outString = out.String()if err != nil {err = fmt.Errorf("exec failed: %v, stderr=%s. name=%s, args=%v.", err, stderr.String(), name, args)}return
}

使用:

_, err = Exec("cp", src, dst)

即可完成文件复制。

移动文件

方式1:通过内置包文件操作实现

func Move(src, dst string) error {return os.Rename(src, dst)
}

方式2:通过exec包实现

_, err = Exec("mv", src, dst)

提示

目标目录不存在时,通过exec.Command的方式执行cp、mv会报错,因此需要提前准备好目的目录。
 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/235276.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

人工智能的发展之路:时间节点、问题与解决办法的全景解析

导言 人工智能的发展历程充满了里程碑式的事件,从早期的概念到今天的广泛应用,每个时间节点都伴随着独特的挑战和创新。本文将详细描述每个关键时间节点的事件,探讨存在的问题、解决办法,以及不同阶段之间的联系。 1. 195…

iOS 收集 SDK 内部 log

为 SDK 设置 log 等级,设置 RCIMClient 的 logLevel 为您期望的,可以在 SDK initWithAppkey 之后设置,比如希望只收集错误 log,那么可以设置为 RC_Log_Level_Error,如果想一般信息、警告信息,错误信息都收集…

Selenium库编写爬虫详细案例

一、引言 Selenium作为一个强大的自动化测试工具,其在网络爬虫领域也展现出了许多技术优势。首先,Selenium可以模拟浏览器行为,包括点击、填写表单、下拉等操作,使得它能够处理一些其他爬虫工具无法应对的情况,比如需…

华为配置IPv4静态路由与静态BFD联动示例

组网需求 如图1所示,SwitchA通过SwitchB和NMS跨网段相连。在SwitchA上通过静态路由与NMS进行正常通信。在SwitchA和SwitchB之间实现毫秒级故障感知,提高收敛速度 配置思路 采用如下思路配置IPv4静态路由与静态BFD联动: 在SwitchA和SwitchB上…

基于ssm在线交友系统论文

基于VUEssm框架的在线交友系统 摘要 本文介绍了在线交友系统的开发全过程。通过分析企业对于在线交友系统的需求,创建了一个计算机管理在线交友系统的方案。文章介绍了在线交友系统的系统分析部分,包括可行性分析等,系统设计部分主要介绍了系…

使用VSC从零开始Vue.js——备赛笔记——2024全国职业院校技能大赛“大数据应用开发”赛项——任务3:数据可视化

使用Visual Studio Code(VSC)进行Vue开发非常方便,下面是一些基本步骤: 一、下载和安装Vue 官网下载地址Download | Node.js Vue.js是基于Node.js的,所以首先需要安装Node.js,官网下载地址:No…

基于Java+Springboot+Vue+elememt宠物用品商城系统设计实现

基于JavaSpringbootVueelememt宠物用品商城系统设计实现 🍅 作者主页 程序开发 🍅 欢迎点赞 👍 收藏 ⭐留言 📝 🍅 文末获取源码联系方式 📝 文章目录 基于JavaSpringbootVueelememt宠物用品商城系统设计实…

基于SSM+Vue的新闻管理系统

基于SSMVue的新闻管理系统的设计与实现~ 开发语言:Java数据库:MySQL技术:SpringSpringMVCMyBatisVue工具:IDEA/Ecilpse、Navicat、Maven 系统展示 主页 新闻列表 管理员界面 用户界面 摘要 新闻管理系统基于SSM(Spr…

界面控件DevExpress v23.2全新发布 - 官宣正式支持.NET 8

DevExpress拥有.NET开发需要的所有平台控件,包含600多个UI控件、报表平台、DevExpress Dashboard eXpressApp 框架、适用于 Visual Studio的CodeRush等一系列辅助工具。屡获大奖的软件开发平台DevExpress 今年第一个重要版本v23.1正式发布,该版本拥有众多…

C# WPF上位机开发(多线程中锁的使用)

【 声明:版权所有,欢迎转载,请勿用于商业用途。 联系信箱:feixiaoxing 163.com】 多线程编程一般都会涉及到锁的时候,很多人可能觉得很意外,为什么会需要这么一个锁。本质上,这主要还是因为多线…

【超详细】基于单片机控制的十字道路口交通灯控制

目录 最终效果 一、设计任务 二、设计报告 1 设计说明 1.1功能分析 1.1.1整体系统功能分析 1.1.2显示状态功能分析 1.1.3设置状态功能分析 1.1.4紧急状态功能分析 1.2方案比选 1.2.1车辆LED数码管倒计时显示板块 1.2.2车辆信号灯显示板块 1.2.3行人信号灯显示板块 …

常见可视化大屏编辑器有哪些?

前言: 在当今数字化时代,可视化大屏编辑器成为了数据展示和决策支持的重要工具。大屏编辑器不仅仅是数据的呈现,更是数据背后的故事的讲述者。它通过图表、图形和实时数据的呈现,为用户提供了全面的信息视图,帮助用户更…

探索Node.js包管理器npm:介绍与使用指南

引言: 在现代软件开发中,包管理器已经成为了不可或缺的工具。它们简化了软件的安装、升级和管理过程,使得开发者能够更加高效地构建项目。而作为Node.js的官方包管理器,npm(Node Package Manager)无疑是最受…

基于SSM的防疫工作志愿者服务平台

文章目录 项目介绍主要功能截图:部分代码展示设计总结项目获取方式🍅 作者主页:超级无敌暴龙战士塔塔开 🍅 简介:Java领域优质创作者🏆、 简历模板、学习资料、面试题库【关注我,都给你】 🍅文末获取源码联系🍅 项目介绍 基于SSM的防疫工作志愿者服务平台,java项…

Scala下划线用法总结

Scala是一门以java虚拟机(JVM)为运行环境并将面向对象和函数式编程的最佳特性结合在一起的静态类型编程语言。scala 单作为一门语言来看, 非常的简洁高效,在Scala中存在很多让代码更加简洁的语法,下划线“_”便是其中一…

渗透测试和漏洞扫描有什么区别

渗透测试和漏洞扫描是网络安全领域中非常重要的两种技术手段,它们都可以帮助组织或企业发现和修复系统中的漏洞和弱点。然而,这两种技术手段在目的、深度、方法和时间和成本等方面存在显著的区别。 首先我们来了解下渗透测试和漏洞扫描分别是什么&#x…

C# .Net学习笔记—— Expression 表达式目录树

一、什么是表达式目录树 (1)Expression我们称为是表达式树,是一种数据结构体,用于存储需要计算,运算的一种结构,这种结构可以只是存储,而不进行运算。通常表达式目录树是配合Lambda一起来使用的…

【Stable Diffusion】在windows环境下部署并使用Stable Diffusion----通过秋葉整合包一键安装

本专栏主要记录人工智能的应用方面的内容,包括chatGPT、AI绘图等等; 在当今AI的热潮下,不学习AI,就要被AI淘汰;所以欢迎小伙伴加入本专栏和我一起探索AI的应用,通过AI来帮助自己提升生产力; 订阅后可私聊我获取 《从零注册并登录使用ChatGPT》《从零开始使用chatGPT的AP…

【Redis】四、Redis.conf详解

文章目录 Redis.conf详解单位网络通用 GENERAL快照REPLICATION 复制SECURITY 安全限制 CLIENTSAPPEND ONLY 模式 aof配置 Redis.conf详解 启动的时候,就通过配置文件来启动! 工作中,一些小小的配置,可以让你脱颖而出!…

openGauss学习笔记-167 openGauss 数据库运维-备份与恢复-导入数据-使用gsql元命令导入数据

文章目录 openGauss学习笔记-167 openGauss 数据库运维-备份与恢复-导入数据-使用gsql元命令导入数据167.1 \copy命令167.2 参数说明167.3 任务示例 openGauss学习笔记-167 openGauss 数据库运维-备份与恢复-导入数据-使用gsql元命令导入数据 gsql工具提供了元命令\copy进行数…