根据代码,出现 “QIODevice::read (QFile, “C:\Users\asua\Pictures\%~2YT]XFRRZVGDDF]@3Q4_3.png”): device not open” 和 “QIODevice::write (QTcpSocket): Called with maxSize < 0” 的错误可能是由于以下原因:
文件未成功打开:在
Widget::on_btn_pic_clicked()
函数中,如果文件无法以只读模式打开,file.open(QIODevice::ReadOnly)
会返回 false。这可能是因为文件路径不正确或者没有足够的权限访问该文件。请确保你提供的图片路径是有效的,并且你有足够的权限来读取该文件。传输数据长度问题:在
sendData()
函数中,len=file.read(buf,sizeof(buf))
返回值表示实际读取到的字节数。然后你使用len=file_socket->write(buf,len)
发送数据。但是在某些情况下,可能会发生网络缓冲区已满导致写入失败,返回负数(例如 -1)。这也可能导致sendedSize
与fileSize
不一致。
针对上述问题,你可以进行以下调整和检查:
- 确保图片路径是正确的,并且具有可读权限。
- 检查在
file.open(QIODevice::ReadOnly)
后是否成功打开了文件。可以添加日志语句来输出相关信息。 - 在发送数据时,检查返回值并处理异常情况。例如,如果
len
返回负数,表示写入失败,则需要处理这种情况。 - 确保网络连接正常并且没有被其他操作中断。
如果你提供更多上下文信息或错误日志,我们可以更好地帮助你解决问题。
内容由零声教学AI助手提供,问题来源于学员提问