一、输入输出设备类
- 功能:
- 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()
读取二进制数据。
- 打开文件,使用
通过上述各类文件系统操作和文件读写的示例,可以完成对文件和目录的多种操作,包括读写文本文件、二进制文件,以及使用临时文件和目录,同时可以监视文件系统的变化。你可以根据具体需求对这些代码进行修改和扩展,以满足不同的应用场景。