从中获取代表文件的所有字节

Getting all the bytes representing the file from it

我正在 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 包含的内容

在 Python 中以读写方式打开文件总是需要在 with 块内以避免麻烦。

正确阅读:

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

正确的写法:

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

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

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

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