我不知道为什么,但我无法得到最简单的QTemporaryFile示例...我的真正意图是在将QAudioInput处理之后将其从QAudioInput写入临时文件。
尝试几次后,我意识到.read(),。readLine(),. readAll()或.write()都没有任何效果......错误字符串总是“未知错误”,它既不适用于QFile,也不适用于QTemporaryFile。
#include <QCoreApplication>
#include <QTemporaryFile>
#include <QDebug>
int main(int argc, char *argv[])
{
QCoreApplication a(argc, argv);
QTemporaryFile tf;
tf.open();
tf.write("Test");
QTextStream in(&tf);
qDebug() << "Testprogramm";
qDebug() << tf.isOpen();
qDebug() << tf.errorString();
qDebug() << in.readLine();
qDebug() << tf.readAll();
tf.close();
return a.exec();
}
调试帖子:
Testprogramm true "Unknown error" "" ""
先感谢您!
您需要将文件指针移回文件的开头。当文件上没有流时,或者当存在流时,必须在文件本身上完成此操作。另外 - QFile
是一个管理文件资源的合适的C ++类。无需手动关闭文件。 QFile::~QFile
做那个工作。
以下工作正常:
#include <QtCore>
int main() {
auto line = QLatin1String("Test");
QTemporaryFile tf;
tf.open();
Q_ASSERT(tf.isOpen());
tf.write(line.data());
tf.reset(); // or tf.seek(0)
QTextStream in(&tf);
Q_ASSERT(in.readLine() == line);
in.seek(0); // not in.reset() nor tf.reset()!
Q_ASSERT(in.readLine() == line);
}
以上还演示了适用于sscce风格代码的以下技术:
#include <QtWidgets>
本身就足够了。main()
论点。QCoreApplication
实例,没有必要。如果您需要应用程序实例但没有应用程序实例,则会获得明确的运行时错误。QLatin1String
上使用QStringLiteral
,其中需要将ASCII字符串与C字符串和QString
s进行比较。隐式ASCII转换可能是错误的来源而且不鼓励。
QLatin1String
是一个常量(只读)包装器,旨在包装C字符串文字 - 因此没有必要另外制作line
const
,尽管在实际项目中你想要遵循项目的样式指南。