12

我在 Qt 4 中无法写入非文本文件。我有一个 QByteArray 数据,我想将它保存到特定目录中名为“some_name.ext”的文件中:“C://MyDir”。我怎样才能做到这一点?请注意,内容不是文本。

格式为“GIF”,Qt 不支持。

QImage mainImage; 
if (!mainImage.loadFromData(aPhoto.data)) 
    return false; 
if (!mainImage.save(imageName, imageFormat.toUtf8().constData())) 
   return false; 

我想以某种方式绕过这个限制!

4

2 回答 2

39

将 QByteArray 写入文件:

QByteArray data;

// If you know the size of the data in advance, you can pre-allocate
// the needed memory with reserve() in order to avoid re-allocations
// and copying of the data as you fill it.
data.reserve(data_size_in_bytes);

// ... fill the array with data ...

// Save the data to a file.
QFile file("C:/MyDir/some_name.ext");
file.open(QIODevice::WriteOnly);
file.write(data);
file.close();

在 Qt 5(5.1 及更高版本)中,您应该在保存新的完整文件时改用QSaveFile(而不是修改现有文件中的数据)。这样可以避免写操作失败时丢失旧文件的情况:

// Save the data to a file.
QSaveFile file("C:/MyDir/some_name.ext");
file.open(QIODevice::WriteOnly);
file.write(data);
// Calling commit() is mandatory, otherwise nothing will be written.
file.commit();

当然,记得检查错误。

另请注意,即使这回答了您的问题,也可能无法解决您的问题。

于 2012-10-20T19:57:31.837 回答
1

您可以使用 QDataStream 写入二进制数据。

QFile file("outfile.dat");
file.open(QIODevice::WriteOnly);
QDataStream out(&file);

然后使用

QDataStream & QDataStream::writeBytes ( const char * s, uint len )

或者

int QDataStream::writeRawData ( const char * s, int len )
于 2012-10-20T12:06:30.497 回答