1

我正在python中创建一个服务器-客户端代码,我试图通过读取文件的字节并发送它来将图像文件从服务器发送到客户端。由于某种原因,已读取的字节不代表可以看到的适当文件 - 当我将读取的字节保存为图像时,它们不会给出我扫描主题的图像。

    elif command == COMMANDS[1]:
        print(f'Reading the bytes of {params[0]}')
        f = open(params[0], 'rb')
        data = f.read()
        if os.path.exists(r'C:\Users\orlav\Desktop\networking_book_stuff\tech_server\screen2.jpg'):
            os.remove(r'C:\Users\orlav\Desktop\networking_book_stuff\tech_server\screen2.jpg')

        f2 = open(r'C:\Users\orlav\Desktop\networking_book_stuff\tech_server\screen2.jpg', 'wb+')
        f2.write(data)

由于某种原因 f2 不包含 f 包含的内容

4

1 回答 1

0

在 Python 中打开文件以进行读取和写入始终需要在with块内以避免麻烦。

正确读法:

with open(file_name, 'rb') as f:
    data = f.read()

正确写法:

with open(file_name, 'wb') as f:
    f.write(data)

with每当块完成时,块强制文件正确关闭和刷新,包括由于异常而完成块的情况。

如果使用 just open(...)without打开文件with,则如果完全正确刷新,则在程序完成之前不会关闭/刷新文件。如果文件被打开写入而不是关闭,它可能只是部分写入。如果打开文件以供阅读并且未关闭,则删除此文件也可能会导致问题。如果未关闭用于读取和写入的缓冲区,则用于缓冲区的内存也不会释放,从而在重复多次打开/读取时导致巨大的内存泄漏。

始终使用with块来打开文件以进行读取和写入,以便在块完成后正确关闭它。

于 2020-10-06T14:39:54.980 回答