本文没有任何技术含量

很多语言中会以诸如”w”、”r”、”a”、”w+”等方式区分文件打开模式

初学时在C语言中并没有仔细理解他们之间的异同点,而且居然隔了这么久才踩到这方面的坑,或许确实是自己代码写的不够多吧。

最近在用Python写一个下载器,本以为断点续传很容易实现,但自己在这个点上卡死了很久,表现出来的问题就是:一次性文件下载完成时表现正常,但中间只要有中断并续传后,文件最终会有损坏。

本以为是下载进度序列化和反序列化过程中出现了问题,在这方面排查许久,但一直无所收获。

无意中发现,自己使用的文件打开方式是”ab”。

本以为可以通过seek的办法实现随机写入,但事实上使用”a”、”ab”、”a+”或者”ab+”的方法打开的文件,文件指针会被定位到文件末尾,且随后使用seek方法也无法移动向前移动,只可向后移动。

后使用”w+”,本以为既然是“读写”方式打开,应该不会清空文件内容,但实际上打开时却会清空文件。

最后实现:

判断下载器临时文件是否存在,如果存在,使用”rb+”方式打开,否则使用”w+”方式创建并打开。