Windows 上的copy命令不支持追加写入,如何获得进度呢

hellsam · · 1667 次点击
随手写的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
更多评论
做个假的进度条
#1
算了 不用windows copy了 自己GO写个得了 也差不了多少性能
#2