gpt4 book ai didi

c++ - QFile 到 QByteArray 保存文件名

转载 作者:塔克拉玛干 更新时间:2023-11-03 07:53:58 25 4
gpt4 key购买 nike

我有一个 QFile 需要通过局域网发送。为此,我将 QFile 转换为 QByteArray,方法是:

//! [Inside a QTcpSocket class]

// Get the file name using a QFileDialog
QFile file(QFileDialog::getOpenFileName(NULL, tr("Upload a file")));

// If the selected file is valid, continue with the upload
if (!file.fileName().isEmpty) {
// Read the file and transform the output to a QByteArray
QByteArray ba = file.readAll();

// Send the QByteArray
write(ba);
}

当我收到它时,我可以使用以下方法轻松转换它:

void saveFile(QByteArray ba) {
// Ask the user where he/she wants to save the file
QFile file(QFileDialog::getSaveFileName(NULL, tr("Save file")));

// Check that the path is valid
if (!file.fileName().isEmpty()) {
// Write contents of ba in file
file.write(ba);
// Close the file
file.close();
}
}

但是,我想知道文件名(例如 Document.docx)或者至少知道它的扩展名以避免强制用户确切知道他收到的文件类型。

理想情况下,当文件上传时,接收方用户会收到保存文件的提示。例如:

  1. 发件人发送Document1.docx
  2. 如果他/她想要保存 Document1.docx
  3. ,接收者会收到提示
  4. 根据接收方的决定,Document1.docx 保存在接收方的工作站。

所以,我的问题是:当 QFile 转换为 QByteArray 然后再次转换(在另一台计算机上)时,有没有办法知道 QFile 的名称和扩展名) 到 QFile?

最佳答案

您只需使用 QFile::readAll() 读取文件的原始字节。

Q: Is there any way to know the name and extension of a QFile when its transformed into a QByteArray?

没有。文件名和扩展名不一定以文件的字节为单位插入。这取决于文件格式。例如,您可以制作具有特定扩展名的自定义文件,并将其名称和扩展名放在字节的开头。

您可以在发送文件的原始字节之前手动发送文件的名称和扩展名。在此之前,您可以发送名称和扩展名的长度以及文件中的字节数。这样你就知道有多少字节与名称、扩展名和原始字节相关。

关于c++ - QFile 到 QByteArray 保存文件名,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23160959/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com