文章目录
- 1、简介
-
- [1.1 QDir](#1.1 QDir)
- [1.2 QFile](#1.2 QFile)
- [1.3 QFileInfo](#1.3 QFileInfo)
- [1.4 QFileSystemWatcher](#1.4 QFileSystemWatcher)
- 2、Qt各种路径
-
- [2.1 程序所在路径](#2.1 程序所在路径)
- [2.2 程序的全路径](#2.2 程序的全路径)
- [2.3 当前工作目录](#2.3 当前工作目录)
- [2.4 用户目录路径](#2.4 用户目录路径)
- [2.5 我的文档路径](#2.5 我的文档路径)
- [2.6 桌面路径](#2.6 桌面路径)
- [2.7 程序数据存放路径](#2.7 程序数据存放路径)
- [2.8 临时文件路径](#2.8 临时文件路径)
- [2.9 遍历文件](#2.9 遍历文件)
- [2.10 路径封装类](#2.10 路径封装类)
- [2.11 Qt读写文件(QFile)](#2.11 Qt读写文件(QFile))
- [2.12 Qt读写文件(QTextStream)](#2.12 Qt读写文件(QTextStream))
- [2.13 Qt读写文件(QDataStream)](#2.13 Qt读写文件(QDataStream))
- [2.14 QSettings配置文件](#2.14 QSettings配置文件)
- 3、C++各种路径
-
- [3.1 获取当前工作目录](#3.1 获取当前工作目录)
- [3.2 读取文件](#3.2 读取文件)
- [3.3 写入文件](#3.3 写入文件)
- 4、C#各种路径
-
- [4.1 获取当前工作目录](#4.1 获取当前工作目录)
- [4.2 读写文件](#4.2 读写文件)
- 结语
1、简介
1.1 QDir
https://doc.qt.io/qt-5/qdir.html
QDir 用于操作路径名、访问有关路径和文件的信息以及操作底层文件系统。
cpp
QDir("/home/user/Documents")
QDir("C:/Users")
QDir("images/landscape.png")
1.2 QFile
https://doc.qt.io/qt-5/qfile.html
QFile 是一个 I/O 设备,用于读取和写入文本和二进制文件以及 .QFile 可以单独使用,也可以更方便地与 或 一起使用 。
cpp
QFile file("in.txt");
if (!file.open(QIODevice::ReadOnly | QIODevice::Text))
return;
while (!file.atEnd()) {
QByteArray line = file.readLine();
process_line(line);
}
1.3 QFileInfo
https://doc.qt.io/qt-5/qfileinfo.html
QFileInfo 提供有关文件的名称和在文件系统中的位置(路径)、其访问权限以及它是目录还是符号链接等的信息。文件的大小和上次修改/读取时间也可用。QFileInfo 还可用于获取有关 Qt 的信息。
cpp
#ifdef Q_OS_WIN
QFileInfo info1("C:\\Users\\Bob\\untabify.lnk");
info1.isSymLink(); // returns true
info1.absoluteFilePath(); // returns "C:/Users/Bob/untabify.lnk"
info1.size(); // returns 63942
info1.symLinkTarget(); // returns "C:/Pretty++/untabify"
QFileInfo info2(info1.symLinkTarget());
info2.isSymLink(); // returns false
info2.absoluteFilePath(); // returns "C:/Pretty++/untabify"
info2.size(); // returns 63942
#endif
cpp
QString path = QDir::cleanPath(QString("C:/QtProject/filepath/") + QDir::separator() + QString("/xiaomu.txt"));
QString fileName = QFileInfo(path).fileName();
1.4 QFileSystemWatcher
https://doc.qt.io/qt-5/qfilesystemwatcher.html
QFileSystemWatcher 类提供了一个接口,用于监视文件和目录以进行修改。
cpp
QFileSystemWatcher *watcher = new QFileSystemWatcher();
watcher->addPath(localPath); // 监听本地路径变化
QObject::connect(watcher, &QFileSystemWatcher::fileChanged, [=](const QString& path) {
QString cloudFilePath = cloudPath + "/" + QFileInfo(path).fileName();
uploadFile(path, cloudFilePath); // 上传文件
});
2、Qt各种路径
2.1 程序所在路径
使用函数:
cpp
QString QCoreApplication::applicationDirPath();
测试如下:
cpp
#include <QCoreApplication>
#include <QDebug>
#include <QDir>
int main(int argc, char *argv[])
{
QCoreApplication a(argc, argv);
qDebug() << "爱看书的小沐";
qDebug() << QCoreApplication::applicationDirPath();
return a.exec();
}
2.2 程序的全路径
使用函数:
cpp
QString QCoreApplication::applicationFilePath();
测试如下:
cpp
#include <QCoreApplication>
#include <QDebug>
#include <QDir>
int main(int argc, char *argv[])
{
QCoreApplication a(argc, argv);
qDebug() << "爱看书的小沐";
qDebug() << QCoreApplication::applicationFilePath();
return a.exec();
}
2.3 当前工作目录
使用函数:
cpp
QString QDir::currentPath()
测试如下:
cpp
#include <QCoreApplication>
#include <QDebug>
#include <QDir>
int main(int argc, char *argv[])
{
QCoreApplication a(argc, argv);
qDebug() << "爱看书的小沐";
qDebug() << QDir::currentPath();
return a.exec();
}
- 设置当前目录
cpp
QDir::setCurrent("/home/user/myapp");
2.4 用户目录路径
Qt 5 中引入的方法:
cpp
static QString QStandardPaths::writableLocation(QStandardPaths::HomeLocation);
static QStringList QStandardPaths::standardLocations(QStandardPaths::HomeLocation);
static QString QDir::homePath();
测试如下:
cpp
#include <QCoreApplication>
#include <QDebug>
#include <QDir>
#include <QStandardPaths>
int main(int argc, char *argv[])
{
QCoreApplication a(argc, argv);
qDebug() << "爱看书的小沐";
qDebug() << QStandardPaths::writableLocation(QStandardPaths::HomeLocation);
qDebug() << QStandardPaths::standardLocations(QStandardPaths::HomeLocation);
qDebug() << QDir::homePath();
return a.exec();
}
2.5 我的文档路径
Qt 5 中引入的方法:
cpp
QStandardPaths::writableLocation(QStandardPaths::DocumentsLocation);
QStandardPaths::standardLocations(QStandardPaths::DocumentsLocation);
测试如下:
cpp
#include <QCoreApplication>
#include <QDebug>
#include <QDir>
#include <QStandardPaths>
int main(int argc, char *argv[])
{
QCoreApplication a(argc, argv);
qDebug() << "爱看书的小沐";
qDebug() << QStandardPaths::writableLocation(QStandardPaths::DocumentsLocation);
qDebug() << QStandardPaths::standardLocations(QStandardPaths::DocumentsLocation);
return a.exec();
}
2.6 桌面路径
Qt 5 中引入的方法:
cpp
QStandardPaths::writableLocation(QStandardPaths::DesktopLocation);
QStandardPaths::standardLocations(QStandardPaths::DesktopLocation);
测试如下:
cpp
#include <QCoreApplication>
#include <QDebug>
#include <QDir>
#include <QStandardPaths>
int main(int argc, char *argv[])
{
QCoreApplication a(argc, argv);
qDebug() << "爱看书的小沐";
qDebug() << QStandardPaths::writableLocation(QStandardPaths::DesktopLocation);
qDebug() << QStandardPaths::standardLocations(QStandardPaths::DesktopLocation);
return a.exec();
}
2.7 程序数据存放路径
Qt 5 中引入的方法:
cpp
QStandardPaths::writableLocation(QStandardPaths::AppDataLocation);
QStandardPaths::standardLocations(QStandardPaths::AppDataLocation);
QStandardPaths::writableLocation(QStandardPaths::AppConfigLocation);
QStandardPaths::standardLocations(QStandardPaths::AppConfigLocation);
测试如下:
cpp
#include <QCoreApplication>
#include <QDebug>
#include <QDir>
#include <QStandardPaths>
int main(int argc, char *argv[])
{
QCoreApplication a(argc, argv);
qDebug() << "爱看书的小沐";
qDebug() << QStandardPaths::writableLocation(QStandardPaths::AppDataLocation);
qDebug() << QStandardPaths::standardLocations(QStandardPaths::AppDataLocation);
qDebug() << QStandardPaths::writableLocation(QStandardPaths::AppConfigLocation);
qDebug() << QStandardPaths::standardLocations(QStandardPaths::AppConfigLocation);
return a.exec();
}
2.8 临时文件路径
Qt 5 中引入的方法:
cpp
QStandardPaths::writableLocation(QStandardPaths::TempLocation);
QStandardPaths::standardLocations(QStandardPaths::TempLocation);
QDir::tempPath();
测试如下:
cpp
#include <QCoreApplication>
#include <QDebug>
#include <QDir>
#include <QStandardPaths>
int main(int argc, char *argv[])
{
QCoreApplication a(argc, argv);
qDebug() << "爱看书的小沐";
qDebug() << QStandardPaths::writableLocation(QStandardPaths::TempLocation);
qDebug() << QStandardPaths::standardLocations(QStandardPaths::TempLocation);
qDebug() << QDir::tempPath();
return a.exec();
}
- QTemporaryFile
QTemporaryFile类是操作临时文件的I/O设备。
cpp
#include <QCoreApplication>
#include <QDebug>
#include <QDir>
#include <QTemporaryFile>
int main(int argc, char *argv[])
{
QCoreApplication a(argc, argv);
qDebug() << "爱看书的小沐";
QTemporaryFile file;
if (file.open()) {
qDebug() << file.fileName();
}
return a.exec();
}
- QTemporaryDir
cpp
#include <QCoreApplication>
#include <QDebug>
#include <QDir>
#include <QTemporaryDir>
int main(int argc, char *argv[])
{
QCoreApplication a(argc, argv);
qDebug() << "爱看书的小沐";
QTemporaryDir dir;
if (dir.isValid()) {
qDebug() << dir.path();
}
return a.exec();
}
2.9 遍历文件
cpp
QDir localDir(localPath);
QStringList entries = localDir.entryList(QDir::Files);
foreach(QString file, entries) {
QString localFilePath = localDir.absoluteFilePath(file);
QString cloudFilePath = cloudPath + "/" + file;
// 将localFilePath上传至cloudFilePath
uploadFile(localFilePath, cloudFilePath);
}
2.10 路径封装类
cpp
class FilePath
{
public:
static QString getAppPath()
{
return qApp->applicationDirPath();
}
static QString getAppFilePath()
{
return qApp->applicationFilePath();
}
static QString getCurrentPath()
{
return QDir::currentPath();
}
static QString getHomePath()
{
return QDir::homePath();
}
static QString getAppDataPath()
{
return QStandardPaths::writableLocation(QStandardPaths::AppDataLocation);
}
static QString getTempPath()
{
return QStandardPaths::writableLocation(QStandardPaths::TempLocation);
}
};
2.11 Qt读写文件(QFile)
- 读文件
cpp
QFile file(absolutePath);
if (file.open(QIODevice::ReadOnly)) {
// 读取文件内容
QByteArray data = file.readAll();
file.close();
}
- 写文件
cpp
QFile file(relativePath);
if (file.open(QIODevice::WriteOnly)) {
// 写入文件内容
file.write("Hello, world!");
file.close();
2.12 Qt读写文件(QTextStream)
使用QTextStream来读取文本文件
- 读取文件
cpp
void readfile()
{
QString path = QFileDialog::getOpenFileName(this, "open", "../", "txt(*.txt)");
if (!path.isEmpty())
{
QFile file(path);
bool isok = file.open(QIODevice::ReadOnly);
if (isok)
{
QTextStream filestream(&file);//QTextStream 与file关联
QString str;
filestream.setCodec("UTF-8");
while (filestream.atEnd()==false)
{
str.append(filestream.readLine());//逐行读取
str.append("\n");
//str = filestream.readAll();//一次性读取全部文件
}
ui.textBrowser->setText(str);
}
file.close();
}
}
- 写文件
cpp
void writefile()
{
QString path = QFileDialog::getSaveFileName(this, "save", "../", "txt(*.txt)");
if (!path.isEmpty())
{
QFile file(path);
bool isok = file.open(QIODevice::WriteOnly);
if (isok)
{
QTextStream filestream(&file);//QTextStream 与file关联
QString str = ui.textBrowser->toPlainText();
filestream << str;//写出文件
qDebug() << str;
}
file.close();
}
}
2.13 Qt读写文件(QDataStream)
使用QDataStream来读取二进制数据。QDataStream类实现了将QIODevice的二进制数据串行化。
- 读文件
cpp
QFile file("file.dat");
file.open(QIODevice::ReadOnly);
QDataStream in(&file);
QString str; qint32 a;
in >> str >> a;
- 写文件
cpp
QFile file("file.dat");
file.open(QIODevice::WriteOnly);
QDataStream out(&file);
out << QString("the answer is");
out << (qint32)42;
2.14 QSettings配置文件
QSettings能读写配置文件,当配置文件不存在时,可生成配置文件。
cpp
#include <QtCore/QtCore>
#include <QFile>
#include <QDebug>
#include <QTextCodec>
void ConfigSetting(void)
{
//文件路径+文件名
QString fileName = QCoreApplication::applicationDirPath() + "/Config.ini";
//创建配置目标,输入文件路径,文件格式
QSettings *setting = new QSettings(fileName , QSettings::IniFormat);
//设置文件编码,配置文件中使用中文时,这是必须的,否则乱码
setting->setIniCodec(QTextCodec::codecForName("UTF-8"));
// 判断文件是否存在
if(QFile::exists(fileName))
{// 文件存在,读出配置项
// 这里的setting->value的第二参数,是配置项缺省值,即当读取的配置项不存在时,读取该值
// User是配置组,name和age是配置项
QString name = setting->value("User/name", "张三").toString();
int age = setting->value("User/age", 30).toInt();
}
else {// 文件不存在,写入配置项,生成配置文件
setting->setValue("User/name", "张三");
setting->setValue("User/age", 30);
// setValue只是把配置项写入了缓冲区,若要写入文件,还需执行同步
// 不同步,无法写入文件,无法生成文件
// 写入配置项后,必须同步才能写入文件
setting->sync();
}
}
3、C++各种路径
3.1 获取当前工作目录
cpp
#include <iostream>
#include <string>
#ifdef _WIN32
#include <io.h>
#include <direct.h>
#else
#include <unistd.h>
#endif
int main() {
std::cout << "爱看书的小沐:" << std::endl;
char currentPath[FILENAME_MAX];
if (getcwd(currentPath, sizeof(currentPath)) != NULL) {
std::cout << "Current working directory: " << currentPath << std::endl;
} else {
perror("getcwd() error");
return 1;
}
return 0;
}
3.2 读取文件
cpp
#include <iostream>
#include <fstream>
#include <string>
int main() {
std::cout << "爱看书的小沐:" <<std::endl;
std::string filePath = "d:/飞鸟集.txt";
std::ifstream file(filePath);
if (file.is_open()) {
std::string line;
while (std::getline(file, line)) {
std::cout << line << std::endl;
}
file.close();
} else {
std::cerr << "Unable to open file: " << filePath << std::endl;
return 1;
}
return 0;
}
3.3 写入文件
cpp
#include <iostream>
#include <fstream>
#include <string>
int main() {
std::cout << "爱看书的小沐:" <<std::endl;
std::string filePath = "d:/飞鸟集.txt";
std::ofstream file(filePath);
if (file.is_open()) {
file << "夏天的飞鸟,飞到我的窗前唱歌,又飞去了。" << std::endl;
file.close();
std::cout << "文件写入ok!" << std::endl;
} else {
std::cerr << "Unable to create file: " << filePath << std::endl;
return 1;
}
return 0;
}
4、C#各种路径
4.1 获取当前工作目录
csharp
using System;
namespace ConsoleApp2
{
class Program
{
static void Main(string[] args)
{
Console.WriteLine("爱看书的小沐:");
string currentDirectory = Environment.CurrentDirectory;
Console.WriteLine("Current working directory: " + currentDirectory);
}
}
}
4.2 读写文件
csharp
using System;
using System.IO;
namespace ConsoleApp2
{
class Program
{
static void Main(string[] args)
{
Console.WriteLine("爱看书的小沐:");
string filePath = @"C:\Users\tomcat\Desktop\飞鸟集.txt";
// 读取文件内容
string[] lines = File.ReadAllLines(filePath);
foreach (string line in lines)
{
Console.WriteLine(line);
}
// 写入文件内容
File.WriteAllText(filePath, "Hello, world!");
}
}
}
结语
如果您觉得该方法或代码有一点点用处,可以给作者点个赞,或打赏杯咖啡;
╮( ̄▽ ̄)╭
如果您感觉方法或代码不咋地
//(ㄒoㄒ)//,就在评论处留言,作者继续改进;
o_O???
如果您需要相关功能的代码定制化开发,可以留言私信作者;
(✿◡‿◡)
感谢各位大佬童鞋们的支持!
( ´ ▽´ )ノ ( ´ ▽´)っ!!!