







最后生成的文件大小和源文件的大小相同,但就是打开文件出错(测试文件是zip文件,解压时出错)。难道是往文件中写入字节流时,字节流的指针位置不对?调试,也没发现从web service获取的字节数组有数据错乱或丢失的情况。于是又用ultra edit对源文件和错误文件进行比较,发现错误文件的末尾部分,好像是最后一次写入的字节数组是对的,其他部分的字节十六进制都是00。这到底是怎么回事啊??是不是在Create方法中传入的参数fmCreate有问题呢,顾名思义,每次以创建的方式打开文件,是不是就把之前的文件内容都清掉了。查看delphi帮助是这么说的:
fmCreate Create a file with the given name. If a file with the given name exists, open the file in write mode.
写的很清楚,对于文件已经存在的,则打开并采用写模式。但是根本就没说会将之前的文件内容清掉啊!浪费了我大半天的时间也没有找到原因。最后无意间发现,当本地磁盘中已有此文件,但是Create的方式为fmOpenWrite时,问题就解决了,前提是同名的文件必须存在,delphi帮助是这样解释fmOpenWrite的:
fmOpenWrite Open the file for writing only. Writing to the file completely replaces the current contents.
以只写的方式打开文件,并将数据完全替换掉当前的内容。也就是说在当前文件流指针所在position开始,将传入的数据替换掉之前的数据,替换的数据长度是由传入的数据长度而定。所以当本地磁盘有相同文件名的文件,但大小大于源文件时,剩余的数据是不会被替换掉的,也就是写入数据完成后的文件大小不会改变。
最后在写入数据之前又加上了几句代码,才搞定此问题:
但是上面的解决办法让心里总觉得别扭,希望还有更好的办法。





