write()后文件大小没有更新?

时间:2014-10-05 17:05:18

标签: python sockets file-io

在下面的代码中,我试图从Python套接字接收文件并将其写入本地文件 我有以下代码

chunk=clientDtSocket.recv(1024)

while chunk:
    print("In Chunk"+str(chunk))    

    incomingFile.write(chunk)
    chunk=clientDtSocket.recv(1024)

我得到了以下

In Chunkb'Sohail Khan'

但文件大小保持不变。 另外,我如何计算我收到的字节数。

2 个答案:

答案 0 :(得分:1)

确保循环后文件已关闭。

您可以使用len函数检查收到的字节数:

chunk = clientDtSocket.recv(1024)

while chunk:
    print("received {} bytes".format(len(chunk))) # <-----
    print("In Chunk " + str(chunk))
    incomingFile.write(chunk)
    chunk = clientDtSocket.recv(1024)

incomingFile.close() # <----

请考虑使用with statement

,而不是手动关闭文件
with open('/path/to/localfile', 'wb') as incomingFile:
    ....

答案 1 :(得分:-1)

当您将文件集写缓冲区大小打开为0时:

bufsize = 0
incomingFile = open('....', 'w', bufsize)

这是正常的行为,在调用写入函数后,数据不会立即保存到文件中,但是将完全填充写入缓冲区。但是,如果您将缓冲区大小设置为0,如上例所示,您的yoor数据将被写入immidiatel。将数据从写入缓冲区写入文件通常称为“刷新”

关闭文件时也会出现刷新:

incomingFile.close()