~~~
COPY没有追加写入,
当复制一个文件时候,马上模板就显示 模板字节大小了,,
根本没办法计算复制的百分比 计算
大家都如何解决的呢
~~~
随手写的demo, 仅供参考
```go
func Copy(src, target string) error {
sf, err := os.Open(src)
if err != nil {
return err
}
defer func() { _ = sf.Close() }()
// 获取文件大小
stat, err := sf.Stat()
if err != nil {
return err
}
size := float64(stat.Size())
tf, err := os.OpenFile(target, os.O_WRONLY|os.O_CREATE|os.O_TRUNC, os.ModePerm)
if err != nil {
return err
}
defer func() { _ = tf.Close() }()
var progress float64
buf := make([]byte, 4096)
for {
n, err := sf.Read(buf)
if err != nil {
if errors.Is(err, io.EOF) {
return nil
}
return err
}
if _, err = tf.Write(buf[:n]); err != nil {
return err
}
progress += float64(n)
// 拷贝一次休眠以下, 不然文件太小复制时看不到进度条效果
time.Sleep(50*time.Millisecond)
// 打印进度条
printBar(progress, size)
}
}
func printBar(progress, size float64) {
bar := make([]byte, 102)
p := progress/size*100
bar[0] = '['
for i := 1; i < 101; i++ {
if i <= int(p) {
bar[i] = '='
} else {
bar[i] = ' '
}
}
bar[101] = ']'
// 不换行输出进度条
fmt.Printf("\r当前进度: %s %.0f/%.0f (%.2f%%)", bar, progress, size, p)
}
```
#7
更多评论