前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >golang把文件复制到另一个目录

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

作者头像
李海彬
发布2018-03-27 14:53:03
2.1K0
发布2018-03-27 14:53:03
举报
文章被收录于专栏:Golang语言社区
代码语言:javascript
复制
//本程序 主要功能是把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)

                    }

                }

            }



        }

    }



}
本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2017-07-26,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 Golang语言社区 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档