用友下载下来的文件显示0字节,千万别直接删,试试这个办法
从用友下载站拿到0字节文件,我一开始以为是白忙活了
前阵子公司要升级财务系统,我负责从用友下载站搞安装包。那天网速还行,下载进度条跑得挺快,但等文件落到桌面上,我一看属性,大小显示0字节。第一反应是点删除,但手停在半空想了想,这玩意儿以前也遇到过好几次,直接删了其实吃亏的是自己。后来折腾了十来分钟,还真把文件救回来了。
0字节文件出现的原因:不是文件真没了,是传输过程卡了壳
我最早碰见0字节文件是在一个老旧的win7机器上,那时候以为是网站给的安装包有问题,气得直接删掉了。后来一次偶然的机会,我试着不删它,而是用别的手段检查了一下,才发现问题出在下载过程中的缓存机制上。用友下载站的文件通常比较大,从几百兆到两三个G都有,浏览器或者下载工具在建立连接时,会先创建一个临时文件占位,然后往里面写数据。但要是网络不稳、服务器响应慢、或者你点了暂停再继续,就可能出现文件写进去的数据没被系统正确识别,显示成0字节。
我个人的经验是,这种0字节文件绝大多数时候不是真的一丁点内容都没有,只是文件表头没更新。你右键属性看大小是0,但用专业工具打开看,底层的数据块可能已经有一部分甚至全部数据躺在那里。特别是用迅雷或者IDM这类工具下载时,更容易碰到这种情况,因为它们预分配磁盘空间的习惯不一样。
千万别删除,先用命令行查一下文件真实大小
我第二次碰到0字节文件时,没急着删,而是打开命令提示符试了一下。方法很简单,按win+R,输入cmd回车,然后cd到文件所在的文件夹,比如你的文件在D盘的downloads文件夹,就输入cd /d D:\downloads。接着输入dir命令,看看这个文件名在磁盘上的占用空间。有时候你会看到文件在列表里显示的Length是0,但下面的可用字节数对不上,或者用dir /q看属性时,文件的实际占用空间不是0。
更靠谱的一招是用fsutil命令。输入fsutil file queryFileNameId 文件名,会返回一个文件ID和实际字节数。我有一次试这个方法,发现那个显示0字节的压缩包,实际底层数据有1.2G,跟正常文件一对比,就差了最后一点尾部的校验信息。这就说明文件主体已经下载完了,只是结尾没写完整,修复一下就能用。
用winrar或7-zip试着打开,经常能直接解压
这个办法是我从IT同事那学来的,后来成了我的必修操作。看到0字节文件,先别管系统怎么显示,直接右键用winrar打开。注意是打开,不是解压。winrar会尝试读取文件的实际内容,如果文件大部分数据是好的,它可能会弹出一个错误提示,说文件格式损坏或意外结束,但依然能列出里面的文件夹和文件。这时候你把winrar窗口里的内容全部拖拽到桌面一个文件夹,常常能成功解压出大部分文件。
有一次我用友T3的安装包就是这么救回来的。拖出来以后,setup.exe可以正常启动,数据库补丁也没损坏,就少了一个说明文档。后来我重新下载了这个说明文档补上,安装过程毫无影响。7-zip也有类似功能,而且在处理某些压缩格式时更宽容。我习惯同时备着这两个工具,因为有些老版本的用友安装包是RAR格式,7-zip有时打不开,但winrar能硬啃下来。
如果是exe或msi安装包,试试直接改后缀运行
这个方法听起来有点玄学,但确实管用几次。有一次我从用友下载站下了一个T+的安装程序,后缀是exe,大小显示0字节。我干脆把后缀改成.zip,然后用winrar打开,里面竟然结构完整,只不过最外层的安装程序壳子没下载完整。我把里面的文件解压出来,又找到那个真正的安装文件。
另一种情况是msi文件。我试过把0字节的msi后缀改成.rar,然后解压,再找到里面的.msi文件直接运行。虽然提示签名可能有问题,但跳过之后安装就能走完。要注意的是,改后缀操作前最好备份原文件,万一操作错了还能回到初始状态。我通常复制一份到同一个文件夹,给副本改后缀,原文件留着当保险。
修复文件尾部:用hex编辑器或批处理补一刀
如果上面两个方法都行不通,说明文件尾部确实丢了一部分数据。这时候可以用Hex编辑器,比如HxD,打开那个0字节文件。你会看到左侧是十六进制数值,右侧是ASCII字符。如果文件开头有正常的压缩包签名,比如RAR的签名是52 61 72 21,ZIP的签名是50 4B 03 04,那就说明文件主体还在,只是尾部被截断了。你往文件末尾滚,如果发现最后几行全是00,那大概率是尾部的校验数据丢了。
我试过一种笨但有效的办法:重新下载一次同一个文件,但只下载到50%就暂停,然后把新下载的文件截取尾部数据,粘到0字节文件的末尾。这个操作听起来麻烦,但实际操作起来,用拷贝命令可以实现。先打开下载工具重新开始下载,等下载到一小半时强制中断,把这个新产生的未完成文件用hex编辑器打开,复制最后几百KB的数据,追加粘贴到0字节文件的末尾,然后保存。虽然报错率不低,但值得一试,尤其是一些重要补丁文件,官方可能已经下架了,只能靠这种办法。
另一个更稳的操作是找朋友或者同事,让他们从下载站重新下一次,把正常的文件发给你,你对比一下大小,直接在本地补上缺失的尾部。我有一次用友U8的补丁就是这么搞定的,同事传过来一个40MB的文件,我把差的2MB数据用hex编辑器复制过去,放回原位置,关闭保存后文件就能正常解压了。
清理下载缓存后重下,别让浏览器和历史记录捣乱
最后一个办法其实是补救无果后的退路,但得说清楚怎么操作才不会再次掉坑。如果前面所有方法都试过还是不行,那只能重下。但重下前一定要清理下载缓存。浏览器的下载管理器会保存断点续传的记录,如果你直接点击重新下载,它可能还会从之前的缓存文件继续,结果又是0字节。
我习惯先关闭所有浏览器窗口,然后去任务管理器里结束所有浏览器进程。接着按win+R输入%temp%,打开临时文件夹,把所有以.ownload或.crdownload结尾的文件都删除。再进到浏览器的下载目录,把那个0字节文件也删了。最后重启浏览器,一定要用无痕模式或者隐私模式重新点本页下载按钮。这样能保证浏览器不会调用任何历史缓存,从零开始下载。
有一次我忘了清理临时文件,重下了三遍,每次都显示0字节,气得差点砸键盘。后来发现是Chrome的下载数据库里存着错误的断点信息,清理后一次成功。用友下载站的文件服务器有时候会限制连接数,如果同时开多个下载任务,也容易造成部分文件写入失败。我建议一次只下载一个文件,下载期间别开其他网页或视频,尽量保证带宽稳定。
实在救不回,检查下载站的验证机制和文件完整性
如果上面所有操作都走了一遍,文件还是0字节,那可能是下载源本身就有问题。我碰到过一次,用友下载站的一个历史版本补丁,那个链接实际上已经失效了,但页面的下载按钮还能点,结果下载下来的就是一个空壳。这时候就得留意下载站是否有文件校验机制。
通常用友官方下载站的页面会有文件MD5值或者SHA1值,你下载完后,用命令certutil -hashfile 文件名 MD5来算一下,看跟页面上写的是否一致。如果页面没提供,可以试着搜索一下这个版本的官方校验码。我一般会多找几个网友发过的截图或者论坛里的记录,比对一下。如果校验码对不上,说明文件在传输过程中就出了严重错误,那个0字节文件基本可以放弃了。
最后提醒一句,千万别在文件属性里点那个安全选项卡里的解除锁定,然后以为就能用了。这种做法跟0字节文件的问题根本不搭边,那是针对从网络下载来的正常文件被系统锁定的情况。面对0字节文件,最傻的做法就是直接删,稍微动动手,可能就把问题解决了。我办公室的同事后来也学到了这招,现在遇到这类情况都会先喊我看看,而不是默默点删除。