golang 如何实现解压各种文件并附带 console 进度条 - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
The Go Programming Language
http://golang.org/
Go Playground
Go Projects
Revel Web Framework
chen0520
V2EX    Go 编程语言

golang 如何实现解压各种文件并附带 console 进度条

  •  
  •   chen0520 44 天前 2070 次点击
    这是一个创建于 44 天前的主题,其中的信息可能已经有所发展或是发生改变。

    mholt/archiver 这个库好像并没有带进度的回调,gpt 搜了几个实现,感觉都不太行,有人做过类似的功能吗? 我看实际解压文件,这类进度基本都是带的啊,实现应该都不复杂啊

    9 条回复    2025-09-14 12:33:43 +08:00
    ysicing
        1
    ysicing  
       44 天前
    https://github.com/cheggaaa/pb 你说这个么,我用这个弄过文件操作的进度条。感觉好像没太大场景吧
    lqs
        2
    lqs  
       44 天前
    写文件的时候,自己累加 Write 的大小,或用 TeeReader 写到计数器
    Sendya
        3
    Sendya  
       44 天前   1
    很多进度都是伪进度,通过 进度=current/total*100 。
    但是我看了眼你描述的这个库,作者有提供一个思路是非常好的,通过读取与写出的 buf 大小累计,可以得出进度,因为原始压缩文件的大小是可以在 OpenFile 返回的 File.Stat() 取到,在计算百分比进度就可以了,这个准确度比通过 已经解压的文件数/总文件数*100 来的更准确些

    https://github.com/mholt/archives/issues/16#issuecomment-2651918336
    lolico
        4
    lolico  
       44 天前 via iPhone
    可以看下 progressbar
    PungentSauce
        6
    PungentSauce  
       44 天前
    我也是用的楼上 github.com/schollz/progressbar 下载文件配合 progressbar 库实现的进度条
    Mohanson
        7
    Mohanson  
       44 天前
    sthwrong
        8
    sthwrong  
       42 天前
    进度条库好找,不过 op 可能想要的是 3 楼的答案,也就是从哪里取得进度数据给进度条实现使用。
    chen0520
        9
    chen0520  
    OP
       25 天前
    @Sendya 按照你提供的 issue 实现了,不过这个包有个让我很困惑的点就是处理函数中获取解压文件的相对路径居然需要将已经抽象的压缩文件变量断言成原始的各个细分类型的压缩文件变量,不明白,这样的话抽象还有啥意义么。
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     892 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 23ms UTC 20:00 PVG 04:00 LAX 13:00 JFK 16:00
    Do have faith in what you're doing.
    ubao snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86