目录和文件操作
文章目录
- 目录和文件操作
- 设备I/O
- 简介
- I/O设备的类型
- 基本文件读写
- QFile
- QTemporaryFile
- 流操作
- QTextStream
- QDataStream
- QFileInfo
- QDir
- QFileSystemWatcher
- QStandardPaths
- QSettings
设备I/O
简介
I/O设备的类型
基本文件读写
QFile
QFile file("C:/Users/PVer/Documents/123.txt");
if (!file.open(QFile::ReadOnly)) {
qWarning() << "文件打开失败";
return;
}
while (!file.atEnd()) {
// qDebug() << file.readLine(); // 按行读取,会把\t\r\n等转义字符读取进去
char c;
file.getChar(&c); // 单个字符读取
qDebug() << c;
}
bool b = file.rename("abc.txt"); // 重命名,重命名的文件在当前工程Debug文件夹里面,原文件删除
if (b) {
qDebug() << file.fileName(); // 如果改名成功,显示当前文件名abc.txt
file.copy("abc.txt", "C:/Users/PVer/Documents/123.txt"); // 把文件拷贝回去
}
file.remove(); // 如果之前重命名成功了,就是移除abc.txt,如果没重命名成功,就是删除123.txt了
file.close(); // 关闭文件,发出了信号,但是要等待系统关闭才关闭
qDebug() << file.fileName(); // 这里输出abc.txt
QFile file1("C:/Users/PVer/Documents/123.txt");
if (!file1.open(QFile::ReadWrite)) {
qWarning() << "打开123失败";
return;
}
file1.write("这是新增的内容"); // 写入新内容
file1.close();
file1.copy("C:/Users/PVer/Documents/123.txt", "cde.txt"); // 如果上一行关闭文件不执行,拷贝的是之前没修改的文件,如果执行了,拷贝的修改后的文件
QTemporaryFile
QTemporaryFile file("123.txt"); // 创建临时文件
if (!file.open()) {
qDebug() << "文件打开失败";
return;
}
qInfo() << file.fileName(); // 全局文件名,每次创建的名字不一样,会在后面加随机字符
qInfo() << file.fileTemplate(); // 获取临时文件的位置,相对位置
file.write("1234");
//file.setAutoRemove(false); // 设置临时文件默认不移除,如果不设置,程序结束自动移除
流操作
QTextStream
QFile file("C:/Users/PVer/Documents/123.txt");
if (!file.open(QFile::ReadWrite)) {
qWarning() << "文件打开失败";
return;
}
QTextStream ts(&file);
// qInfo() << ts.readLine(); // 按行读取
// qInfo() << ts.read(100); // 读取100个字节
// ts << 2024 << '\n'
// << 2.33 << '\n'
// << "abc" << '\n';
int a;
QString str;
float b;
ts >> a >> b >> str;
qDebug() << a << b << str;
QDataStream
QByteArray arr;
QDataStream dt(&arr, QIODevice::ReadWrite);
int a;
dt << 1;
qDebug() << arr; // 运行结果"\x00\x00\x00\x01"
QFileInfo
QFileInfo fi("G:/Qt/MaintenanceTool.exe");
if (!fi.exists())
return;
qInfo() << fi.path(); //"G:/Qt"
qInfo() << fi.fileName(); //"MaintenanceTool.exe"
qInfo() << fi.baseName(); //"MaintenanceTool"
QDir
QDir dir("G:/Qt");
qDebug() << dir.exists();
if (!dir.exists())
return;
dir.setFilter(QDir::NoDotAndDotDot | QDir::Files); // 排除.和..文件
qDebug() << dir.count(); // 输出包含文件数量
QFileInfoList fLst = dir.entryInfoList(QStringList() << "*.txt"); // 获取后缀.txt文件信息
for (auto& f : fLst)
qDebug() << f.fileName();
QFileSystemWatcher
QFileSystemWatcher* fsc = new QFileSystemWatcher;
fsc->addPath("G:/abc/123.TXT");
qDebug() << fsc->files();
fsc->addPaths(QStringList() << "G:/abc/def"
<< "G:/abc/dsds");
qDebug() << fsc->directories();
connect(fsc, &QFileSystemWatcher::fileChanged, [=] { qDebug() << "文件改变"; });
connect(fsc, &QFileSystemWatcher::directoryChanged, [=] { qDebug() << "目录改变"; });
QStandardPaths
qInfo() << QStandardPaths::displayName(QStandardPaths::DesktopLocation);
qInfo() << QStandardPaths::findExecutable("qtcreator.exe", QStringList() << "G:/Qt/Tools/QtCreator/bin"); // 在当前文件夹中查找可执行程序
qInfo() << QStandardPaths::locate(QStandardPaths::DocumentsLocation, "123.txt"); // 文档里面查找,找到就返回地址,找不到就是个空字符串
qInfo() << QStandardPaths::writableLocation(QStandardPaths::AppDataLocation); // 目录不一定存在,只是把目录作一个拼接,显示拼接的地址
QSettings
- 写入注册表
QSettings setting("yerennuo", "fileTest");
setting.setValue("size", QSize(1280, 720)); // 在注册表里保存
setting.beginGroup("window"); // 在新开的组window里写入
setting.setValue("pos", QPoint(100, 100));
setting.endGroup();
QSettings setting1("HKEY_CURRENT_USER\\SOFTWARE\\yerennuo\\fileTest", QSettings::NativeFormat);
qDebug() << setting1.value("size").toSize(); // 获取结果QSize(1280, 720)
qDebug() << setting1.value("window/pos").toPoint();
- 写入ini文件
QSettings st("config.ini", QSettings::IniFormat);
st.setValue("pos", QPoint(200, 200));
st.beginGroup("window");
st.setValue("rect", QRect(0, 0, 10, 10));
st.endGroup();
在debug文件夹会出现一个config.ini