我有一个名为“myfolder”的文件夹,其中包含一些 txt 和 jpeg 文件以及一个名为“test”的文件夹。 我想复制我的文件夹中的文件进行测试,直到它达到一定大小,例如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
slice 中的每个 文件,第一个文件除外。
您可能想在那里复制一个文件。
尽管您的代码很难理解——我不确定为什么 files
存在,也不确定您为什么要遍历目录结构两次。所以你的目标不是很明确,所以很难更具体。
另请注意:您不应使用copy
作为函数名称,因为它是一个built-in。 ,因此会使您的代码难以阅读。
关于go - 将文件复制到文件夹中,直到达到一定大小,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56913543/