操作文件是各种语言和类库的基本功能. Qt是如何读写文件的呢?
在Qt的文档有就有答案. 在QFile的文档中指出了几种操作文件的方法, 其中QTextStream是比较好理解和使用的:
读取操作:
The next example uses QTextStream to read a text file line by line:
QFile file("in.txt"); if (!file.open(QIODevice::ReadOnly | QIODevice::Text)) return; QTextStream in(&file); while (!in.atEnd()) { QString line = in.readLine(); //process string line here }
写入操作:
QFile file("out.txt"); if (!file.open(QIODevice::WriteOnly | QIODevice::Text)) return; QTextStream out(&file); out << "The magic number is: " << 49 << "\n";比较让人疑惑的地方是为什么QFile在open()之后没有调用close().
后来查了文档, 在QFile的析构里有这样的说明:
Destroys the file object, closing it if necessary.
表示析构里可以自动close(). 不过良好的习惯还是在适当的地方自己close()一下.
有open()就有close(), 有new就有delete, 以后代码的阅读者看着也放心, 不会嘀咕怎么似乎没有close.
还有一点很重要的是, 读取文本类型文件(比如txt)用QTextStream, 而读取二进制文件的时候(比如图片或者exe或者PDF文件)要用QDateStream这个类.
进一步说, 由于QFile继承自QIODevice, 可以直接用QFile进行读写操作, 文档里也有例子, 就不细说了.