一、输入输出设备类
- 功能:
- Qt 提供了一系列的输入输出设备类,用于处理不同类型的 I/O 操作,如文件、网络等。
二、文件读写操作类
- QFile 类:
- 提供了对文件的读写操作,可以打开、读取、写入和关闭文件。
- 示例:
#include <QApplication>
#include <QFile>
#include <QTextStream>
#include <QDebug>int main(int argc, char *argv[])
{QApplication app(argc, argv);QFile file("example.txt");if (file.open(QIODevice::ReadWrite | QIODevice::Text)) {QTextStream stream(&file);// 写入数据stream << "Hello, World!" << endl;// 回到文件开头file.seek(0);// 读取数据QString line = stream.readLine();qDebug() << line;file.close();}return app.exec();
}
- 代码解释:
- 创建
QFile
对象并打开文件,使用QIODevice::ReadWrite | QIODevice::Text
模式。 - 使用
QTextStream
进行文本的读写操作。 stream << "Hello, World!" << endl;
写入文本。file.seek(0);
将文件指针移到开头。stream.readLine();
读取一行文本。
- 创建
三、QFileInfo 类
- 功能:
- 提供了文件信息的访问,如文件大小、文件路径、文件是否存在等。
- 示例:
#include <QApplication>
#include <QFileInfo>
#include <QDebug>int main(int argc, char *argv[])
{QApplication app(argc, argv);QFileInfo fileInfo("example.txt");if (fileInfo.exists()) {qDebug() << "File size: " << fileInfo.size();qDebug() << "File path: " << fileInfo.filePath();}return app.exec();
}
- 代码解释:
- 创建
QFileInfo
对象。 - 使用
exists()
检查文件是否存在。 - 使用
size()
获取文件大小,filePath()
获取文件路径。
- 创建
四、QDir 类
- 功能:
- 提供了对目录的操作,如创建目录、遍历目录、获取目录内容等。
- 示例:
#include <QApplication>
#include <QDir>
#include <QDebug>int main(int argc, char *argv[])
{QApplication app(argc, argv);QDir dir;if (!dir.exists("new_dir")) {dir.mkdir("new_dir");}dir.setPath("new_dir");foreach (QFileInfo fileInfo, dir.entryInfoList(QDir::Files | QDir::NoDotAndDotDot)) {qDebug() << fileInfo.fileName();}return app.exec();
}
- 代码解释:
- 创建
QDir
对象。 - 使用
mkdir()
创建目录。 - 使用
entryInfoList()
遍历目录中的文件并输出文件名。
- 创建
五、QTemporaryDir 类
- 功能:
- 创建临时目录。
- 示例:
#include <QApplication>
#include <QTemporaryDir>
#include <QDebug>int main(int argc, char *argv[])
{QApplication app(argc, argv);QTemporaryDir tempDir;if (tempDir.isValid()) {qDebug() << "Temporary directory: " << tempDir.path();}return app.exec();
}
- 代码解释:
- 创建
QTemporaryDir
对象。 - 使用
isValid()
检查是否有效,path()
获取目录路径。
- 创建
六、QTemporaryFile 类
- 功能:
- 创建临时文件。
- 示例:
#include <QApplication>
#include <QTemporaryFile>
#include <QTextStream>
#include <QDebug>int main(int argc, char *argv[])
{QApplication app(argc, argv);QTemporaryFile tempFile;if (tempFile.open()) {QTextStream stream(&tempFile);stream << "Temporary data";tempFile.seek(0);QString data = stream.readAll();qDebug() << data;}return app.exec();
}
- 代码解释:
- 创建
QTemporaryFile
对象并打开。 - 使用
QTextStream
进行读写操作。
- 创建
七、QFileSystemWatcher 类
- 功能:
- 监视文件和目录的更改。
- 示例:
#include <QApplication>
#include <QFileSystemWatcher>
#include <QDebug>int main(int argc, char *argv[])
{QApplication app(argc, argv);QFileSystemWatcher watcher;watcher.addPath("example.txt");QObject::connect(&watcher, &QFileSystemWatcher::fileChanged, [](const QString &path) {qDebug() << path << " has changed";});return app.exec();
}
- 代码解释:
- 创建
QFileSystemWatcher
对象。 - 使用
addPath()
监视文件。 - 连接
fileChanged
信号,当文件更改时输出信息。
- 创建
八、读文件和写文件
1. 用 QFile 读写文本文件
- 参考前面
QFile
类的示例。
2. 用 QSaveFile 保存文件
QSaveFile
确保文件的原子性保存,避免写入失败时文件损坏。
#include <QApplication>
#include <QSaveFile>
#include <QTextStream>
#include <QDebug>int main(int argc, char *argv[])
{QApplication app(argc, argv);QSaveFile saveFile("example.txt");if (saveFile.open(QIODevice::WriteOnly | QIODevice::Text)) {QTextStream stream(&saveFile);stream << "Hello, World!" << endl;if (saveFile.commit()) {qDebug() << "File saved successfully";} else {qDebug() << "Failed to save file";}}return app.exec();
}
- 代码解释:
- 创建
QSaveFile
对象并打开。 - 使用
QTextStream
写入数据。 - 使用
commit()
保存文件。
- 创建
3. 读写二进制文件
-
基础知识和工具软件:
- 可以使用
QDataStream
以预定编码方式读写文件,或使用原始二进制数据方式读写文件。
- 可以使用
-
使用 QDataStream 类读写二进制文件:
#include <QApplication>
#include <QFile>
#include <QDataStream>
#include <QDebug>int main(int argc, char *argv[])
{QApplication app(argc, argv);QFile file("binary.dat");if (file.open(QIODevice::WriteOnly)) {QDataStream stream(&file);int number = 42;stream << number;file.close();}if (file.open(QIODevice::ReadOnly)) {QDataStream stream(&file);int readNumber;stream >> readNumber;qDebug() << "Read number: " << readNumber;file.close();}return app.exec();
}
-
代码解释:
- 打开文件,使用
QDataStream
写入和读取整数。 stream << number;
写入数据。stream >> readNumber;
读取数据。
- 打开文件,使用
-
使用原始二进制数据方式读写文件:
#include <QApplication>
#include <QFile>
#include <QDebug>int main(int argc, char *argv[])
{QApplication app(argc, argv);QFile file("raw.bin");if (file.open(QIODevice::WriteOnly)) {char data[] = {0x01, 0x02, 0x03};file.write(data, sizeof(data));file.close();}if (file.open(QIODevice::ReadOnly)) {char buffer[3];file.read(buffer, 3);qDebug() << "Read data: " << buffer[0] << buffer[1] << buffer[2];file.close();}return app.exec();
}
- 代码解释:
- 打开文件,使用
write()
写入原始二进制数据。 - 使用
read()
读取二进制数据。
- 打开文件,使用
通过上述各类文件系统操作和文件读写的示例,可以完成对文件和目录的多种操作,包括读写文本文件、二进制文件,以及使用临时文件和目录,同时可以监视文件系统的变化。你可以根据具体需求对这些代码进行修改和扩展,以满足不同的应用场景。