登录
首页 >  Golang >  Go问答

将文件复制到文件夹,直至大小达到特定限制

来源:stackoverflow

时间:2024-03-02 22:15:26 236浏览 收藏

Golang小白一枚,正在不断学习积累知识,现将学习到的知识记录一下,也是将我的所得分享给大家!而今天这篇文章《将文件复制到文件夹,直至大小达到特定限制》带大家来了解一下##content_title##,希望对大家的知识积累有所帮助,从而弥补自己的不足,助力实战开发!


问题内容

我有一个名为“myfolder”的文件夹,其中包含一些 txt 和 jpeg 文件,以及一个名为“test”的文件夹。 我想复制myfolder中的文件进行测试,直到达到一定大小,例如10mb,然后停止复制。

这是我的代码,不起作用:

package main

import (
    "errors"
    "fmt"
    "io/ioutil"
    "os"
    "path/filepath"
    "strconv"
)

var (
    MyFolderPath = "/home/jim/myfolder"
    files        []string
)

func copy(source []string, destination string) {

    for a, b := range source {
        input, _ := ioutil.ReadFile(b)
        ioutil.WriteFile(destination+strconv.Itoa(a), input, 0777)
    }

}

func CopyFile(path string) {
    var size int64
    done := errors.New("size reached")
    err := filepath.Walk(path, func(_ string, info os.FileInfo, err error) error {
        if err != nil {
            return err
        }
        copy(files[1:], fmt.Sprintf("%v/test/%v", MyFolderPath, "file"))
        size += info.Size()

        if size > 10000 {
            return done
        }

        return err

    })
    if err != nil {
        fmt.Println(err)
    }

}

func CollectFiles() {
    err := filepath.Walk(MyFolderPath, func(path string, info os.FileInfo, err error) error {
        if err != nil {
            fmt.Println(err)
        }
        files = append(files, path)
        return nil

    })
    if err != nil {
        fmt.Println(err)
    }
}

func main() {
    CollectFiles()
    CopyFile(fmt.Sprintf("%v/test", MyFolderPath))
}

我做错了什么以及如何以正确的方式做?


解决方案


这一行是错误的:

copy(files[1:], fmt.Sprintf("%v/test/%v", MyFolderPath, "file"))

每次找到文件匹配时,您都会告诉它(重新)复制 files 切片中的每个文件(第一个文件除外)。

您可能想在那里复制一个文件。

虽然你的代码很难推理——我不确定为什么 files 存在,也不知道为什么你要两次遍历你的目录结构。所以你的目标并不明确,所以很难更具体。

另请注意:您不应使用 copy 作为函数名称,因为它是 built-in,因此会使您的代码阅读起来非常混乱。

今天关于《将文件复制到文件夹,直至大小达到特定限制》的内容介绍就到此结束,如果有什么疑问或者建议,可以在golang学习网公众号下多多回复交流;文中若有不正之处,也希望回复留言以告知!

声明:本文转载于:stackoverflow 如有侵犯,请联系study_golang@163.com删除
相关阅读
更多>
最新阅读
更多>
课程推荐
更多>