سؤال

لقد قمت مؤخرًا بالبرمجة للقيام بنقل الملفات باستخدام Qt.اعتقدت أن الأمر نجح الآن، وما زلت أشعر بالفضول بشأن ما حدث.الرجاء مساعدتي في معرفة السبب.تشكرات.

لماذا يكون حجم الرأس أكبر من مجموع sizeof(qin32) وsizeof(qint32) وطول اسم الملف؟ (أعتقد أن هذا هو سبب الوظيفة - setVersion())

QFileInfo info(file_to_send.fileName());
QByteArray head;
QDataStream out(&head, QIODevice::WriteOnly);
out.setVersion(QDataStream::Qt_5_0);
out << qint32(file_to_send.size() + info.fileName().length() + sizeof(qint32)*2)
    << qint32(info.fileName().length())
    << info.fileName();
tcpClient.write(head);
هل كانت مفيدة؟

المحلول

لقد جعلتها معقدة.النمط مثل هذا:

giveacodicetagpre.

وقراءة التعليمات البرمجية:

giveacodicetagpre.

نصائح أخرى

info.filename() يكتب طوله الخاص

إذا كنت لا تريد ذلك فيمكنك أن تفعل

QFileInfo info(file_to_send.fileName());
QByteArray head;
QDataStream out(&head, QIODevice::WriteOnly);
out.setVersion(QDataStream::Qt_5_0);
QByteArray filename = info.fileName().toLatin1();
out << qint32(file_to_send.size() + filename .length() + sizeof(qint32)*2);
    << qint32(filename .length())
out.writeRawData(fileName.constData(), filename.length());
tcpClient.write(head);

استخدام writeRawData الذي يتجاوز أي ترميز مدمج

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top