golang把文件复制到另一个目录

//本程序 主要功能是把A文件夹下的文件与B目录下文件对比,如果找到就覆盖到B相应的目录下。 // 用法: merge A目录 B目录 // merge.go package main import ( "flag" "fmt" "os" "path/filepath" "strings" "time" "github.com/Unknwon/com" ) const ( IsDirectory = iota IsRegular IsSymlink ) type sysFile struct { fType int fName string fLink string fSize int64 fMtime time.Time fPerm os.FileMode } type F struct { files []*sysFile } func (self *F) visit(path string, f os.FileInfo, err error) error { if f == nil { return err } var tp int if f.IsDir() { tp = IsDirectory } else if (f.Mode() & os.ModeSymlink) > 0 { tp = IsSymlink } else { tp = IsRegular } inoFile := &sysFile{ fName: path, fType: tp, fPerm: f.Mode(), fMtime: f.ModTime(), fSize: f.Size(), } self.files = append(self.files, inoFile) return nil } func main() { flag.Parse() sourcedir := flag.Arg(0) decdir := flag.Arg(1) source := F{ files: make([]*sysFile, 0), } err := filepath.Walk(sourcedir, func(path string, f os.FileInfo, err error) error { return source.visit(path, f, err) }) if err != nil { fmt.Printf("filepath.Walk() returned %v\n", err) } dec := F{ files: make([]*sysFile, 0), } err = filepath.Walk(decdir, func(path string, f os.FileInfo, err error) error { return dec.visit(path, f, err) }) if err != nil { fmt.Printf("filepath.Walk() returned %v\n", err) } for _, v := range source.files { if com.IsFile(v.fName) == true { tmp1 := strings.Split(v.fName, "\\") sourcename := tmp1[len(tmp1)-1] for _, r := range dec.files { if com.IsFile(r.fName) == true { tmp2 := strings.Split(r.fName, "\\") decname := tmp2[len(tmp2)-1] if sourcename == decname { fmt.Printf("the same file: %s\n", sourcename) com.Copy(v.fName, r.fName) } } } } } }

原文发布于微信公众号 - Golang语言社区(Golangweb)

原文发表时间:2017-08-12

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏Google Dart

AngularDart Material Design 弹出框 顶

该组件将自己发布为DropdownHandle,因此其子级可以通过注入来控制其可见性:

20330
来自专栏菩提树下的杨过

ExtJs学习笔记(13)_Card布局

这个布局其实最为麻烦,主要是用来实现类似"上一步","下一步"类似向导的界面 代码如下: <!DOCTYPE html PUBLIC "-//W3C//DTD...

236100
来自专栏程序员的诗和远方

Canvas画图-鼠标移动图形

之前那篇Canvas画图-鼠标涂鸦已经可以实现与Canvas的简单交互,这篇会介绍Canvas中实现交互性的一个重要方法isPointInPath。 基本...

39950
来自专栏林德熙的博客

win10 uwp 自定义控件 SplitViewItem SplitView 从右划出

本文主要是因为汉堡菜单里面列出的菜单很多重复的图标和文字,我把它作为控件,因为是随便写,可能存在错误,如果发现了,请和我说或关掉浏览器,请不要发不良言论。

12620
来自专栏微信小开发

五分钟掌握微信小程序轮播图

从公共库v1.4.0开始,change事件返回detail中包含一个source字段,表示导致变更的原因,可能值如下: autoplay 自动播放导致 swip...

24260
来自专栏xx_Cc的学习总结专栏

六天完成一个简单iOS App - 第二天

29950
来自专栏菩提树下的杨过

c#:winform鼠标拖动窗口大小时,设定窗口最小尺寸

winform 程序运行过程中,用户用鼠标拖动窗体大小时,如将窗体调整得极小,可能窗体上的控件就面目全非(或看不到了),用下面的代码可以设定窗口的最小尺寸,以防...

205100
来自专栏非典型技术宅

断言和分段控制器1. 断言(Assertions)2. 分段控制器(UISegmentedControl)

9930
来自专栏向治洪

React Native导航器之react-navigation使用

在上一节Navigation组件,我们使用系统提供的导航组件做了一个跳转的例子,不过其实战能力不强,这里推荐一个超牛逼的第三方库:react-navigatio...

2.2K70
来自专栏我和未来有约会

动态创建Storyboard

做动画或者做控件的时候不一定都要在xaml里做Storyboard,有时候在代码里动态创建会更加灵活些。 这里以我做的一个改变颜色的Storyboard为例来做...

38040

扫码关注云+社区

领取腾讯云代金券