目录
Qt中获取系统目录的方法
Qt 程序获取程序所在路径、用户目录路径、临时文件夹等特殊路径的方法
---------------------------------------------------
桌面路径: Qt 5 中引入的方法。
QStandardPaths::writableLocation(QStandardPaths::DesktopLocation);
QStandardPaths::standardLocations(QStandardPaths::DesktopLocation);
参考:官方手册
writableLocation:
[static] QString QStandardPaths::writableLocation(QStandardPaths::StandardLocation type)
Returns the directory where files of type should be written to, or an empty string if the location cannot be determined.
Note: The storage location returned may not exist; that is, it may need to be created by the system or the user.
standardLocations:
[static] QStringList QStandardPaths::standardLocations(QStandardPaths::StandardLocation type)
Returns all the directories where files of type belong.
The list of directories is sorted from high to low priority, starting with writableLocation() if it can be determined. This list is empty if no locations for type are defined.
See also writableLocation().
打开/home目录,按Ctrl+H,就可以看到.config文件夹了。 //隐藏开关
=============================
Qt中获取系统目录的方法
2016.06.15 14:10:14字数 51阅读 3,554
1. 获取Temp目录:
QString strDir= QDir::tempPath();
2. 获取AppData目录:
QDir dir = QDir::temp();
dir.cdUp();
QString strDir = dir.absolutePath();
3. 获取桌面目录:
QString strDir = QDir::homePath() + "/Desktop";
==========================
Qt 获取系统路径实例
QStandardPaths::writableLocation(QStandardPaths::???)
DesktopLocation "C:/Users/Administrator/Desktop"
DocumentsLocation "C:/Users/Administrator/Documents"
FontsLocation "C:/WINDOWS/Fonts"
ApplicationsLocation "C:/Users/Administrator/AppData/Roaming/Microsoft/Windows/Start Menu/Programs"
MusicLocation "C:/Users/Administrator/Music"
MoviesLocation "C:/Users/Administrator/Videos"
PicturesLocation "C:/Users/Administrator/Pictures"
RuntimeLocation "C:/Users/Administrator"
DownloadLocation "C:/Users/Administrator/Downloads"
GenericCacheLocation "C:/Users/Administrator/AppData/Local/cache"
GenericConfigLocation "C:/Users/Administrator/AppData/Local"
CacheLocation "C:/Users/Administrator/AppData/Local/TestApp/cache"
GenericDataLocation "C:/Users/Administrator/AppData/Local"
TempLocation "C:/Users/Administrator/AppData/Local/Temp"
HomeLocation "C:/Users/Administrator"
DataLocation "C:/Users/Administrator/AppData/Local/TestApp"
ConfigLocation "C:/Users/Administrator/AppData/Local/TestApp"
//
AppDataLocation "C:/Users/Administrator/AppData/Roaming/TestApp"
AppConfigLocation "C:/Users/Administrator/AppData/Local/TestApp"
AppLocalDataLocation "C:/Users/Administrator/AppData/Local/TestApp"
作者:爱写诗的程序员zxp
链接:https://www.jianshu.com/p/12672880511a
来源:简书
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
Qt 程序获取程序所在路径、用户目录路径、临时文件夹等特殊路径的方法
Qt 程序获取程序所在路径、用户目录路径、临时文件夹等特殊路径的方法
经常我们的程序中需要访问一些特殊的路径,比如程序所在的路径、用户目录路径、临时文件夹等。在 Qt 中实现这几个功能所用的方法虽然都不难,但是各不相同,每次用到时还要现去查,很不方便。因此就写了这篇博客,把这几种需求的实现方式总结了一下。算是个备忘录吧。
程序所在路径
获取程序所在路径,QCoreApplication 类里就实现了相关的功能:
QString QCoreApplication::applicationDirPath()
比如我们有一个程序在:
C:/Qt/examples/tools/regexp/regexp.exe
那么 qApp->applicationDirPath() 的结果是:
C:/Qt/examples/tools/regexp
如果除了程序所在路径,我们还想要程序的完整名称。那么可以这么写:
qApp->applicationFilePath()
还是上面的例子,结果是:
C:/Qt/examples/tools/regexp/regexp.exe
当前工作目录
QDir 提供了一个静态函数 currentPath() 可以获取当前工作目录,函数原型如下:
QString QDir::currentPath()
如果我们是双击一个程序运行的,那么程序的工作目录就是程序所在目录。
如果是在命令行下运行一个程序,那么运行程序时在命令行的哪个目录,那个目录就是当前目录。
用户目录路径
Qt 4 中的方法。下面的方法只对 Qt 4 有效,Qt 5 已经删除了 storageLocation() 方法。
QDesktopServices::storageLocation(QDesktopServices::HomeLocation);
Qt 5 中引入的方法。
QStandardPaths::writableLocation(QStandardPaths::HomeLocation);
或者
QStandardPaths::standardLocations(QStandardPaths::HomeLocation);
这两个方法的区别是 standardLocations() 返回值是 QStringList。当然对于 HomeLocation 来说这个 QStringList 中只有一个 QString。
还有另外一种方法,利用 QDir 类的一个静态函数:
QDir::homePath();
我的文档路径
Qt 4 中的方法。下面的方法只对 Qt 4 有效,Qt 5 已经删除了 storageLocation() 方法。
QDesktopServices::storageLocation(QDesktopServices::DocumentsLocation);
Qt 5 中引入的方法。
QStandardPaths::writableLocation(QStandardPaths::DocumentsLocation);
QStandardPaths::standardLocations(QStandardPaths::DocumentsLocation);
桌面路径
Qt 4 中的方法。下面的方法只对 Qt 4 有效,Qt 5 已经删除了 storageLocation() 方法。
QDesktopServices::storageLocation(QDesktopServices::DesktopLocation);
Qt 5 中引入的方法。
QStandardPaths::writableLocation(QStandardPaths::DesktopLocation);
QStandardPaths::standardLocations(QStandardPaths::DesktopLocation);
程序数据存放路径
通常我们会将程序所需的一些数据存入注册表。但是有时需要存储的数据太多,放在注册表中就不适合了。这时我们就要找个专门的地方来放数据。
以前我喜欢将数据直接放到程序所在目录,但是后来发现我的程序运行时经常没有权限对这个目录下的文件进行写操作。后来发现其实 Qt 早就替我们考虑过这些问题了。
Qt 4 中的方法。下面的方法只对 Qt 4 有效,Qt 5 已经删除了 storageLocation() 方法。
QDesktopServices::storageLocation(QDesktopServices::DataLocation);
Qt 5 中引入的方法。
QStandardPaths::writableLocation(QStandardPaths::AppDataLocation);
QStandardPaths::standardLocations(QStandardPaths::AppDataLocation);
Qt 5.5 中引入了另一种方法:
QStandardPaths::writableLocation(QStandardPaths::AppConfigLocation);
QStandardPaths::standardLocations(QStandardPaths::AppConfigLocation);
这个方法一般来说和上面的方法得到的结果是相同的。按照 Qt 帮助文档的解释,这个方法可以确保返回的路径非空。所以我认为应该优先选用这个方法。
//测试代码
QString mypath;
mypath =QStandardPaths::writableLocation(QStandardPaths::AppConfigLocation);
qDebug()<<"QStandardPaths :: "<<mypath;
输出结果:
QStandardPaths :: "C:/Users/abc/AppData/Local/untitled1" // win OS
QStandardPaths :: "/home/abc/.config/untitled1" //debian
临时文件路径
Qt 4 中的方法。下面的方法只对 Qt 4 有效,Qt 5 已经删除了 storageLocation() 方法。
QDesktopServices::storageLocation(QDesktopServices::TempLocation);
Qt 5 中引入的方法。
QStandardPaths::writableLocation(QStandardPaths::TempLocation);
QStandardPaths::standardLocations(QStandardPaths::TempLocation);
更传统的方法是利用 QDir 的一个静态函数 tempPath()。
QDir::tempPath();
在这个目录下生成临时文件和临时目录需要用到另外两个类:
QTemporaryFile 和 QTemporaryDir。
就不展开介绍了,大家可以参考 qt 的帮助文档。
至此,常用的各种特殊路径就介绍的差不多了。剩下还有些不常用的,可以参考 QStandardPaths 类的介绍。
————————————————
版权声明:本文为CSDN博主「liyuanbhu」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/liyuanbhu/article/details/53710249
.cache文件夹:存储应用缓存数据,
.config文件夹:存储了一部分应用程序的配置
.local文件夹:有点像/usr/local,里面也有bin文件夹,但是,存在这里的文件,只有该用户才能使用。
这是我的家目录的部分文件:
其中.cache文件夹存储应用缓存数据,.config文件夹存储了一部分应用程序的配置,比如说我的 Chrome 浏览器配置就是那里面。
但是还有一部分应用程序并不把配置储存在.config文件夹,而是自己创建一个隐藏文件夹,存放自己的配置文件等等信息,比如你可以看到 Intellij 的配置文件就不在.config中。
最后说.local文件夹,有点像/usr/local,里面也有bin文件夹,也是存放可执行文件的。比如说我的 python pip 以及 pip 安装的一些工具,都存放在~/.local/bin目录中。但是,存在这里的文件,只有该用户才能使用。
这就是为什么,有时候普通用户可以使用的命令,用 sudo 或者超级用户却被告知找不到该命令。因为有的命令是特定用户家目录里的,仅被添加到了该用户的PATH环境变量里,只有他可以直接用。你超级用户想用当然可以,但是得写全绝对路径才行。
appdata是什么文件:
https://baijiahao.baidu.com/s?id=1629072228240716349&wfr=spider&for=pc
appdata下通常只有三个文件夹,它们分别是Local,LocalLow,Roaming,其实appdata就是xp里的application data.
有你在各种程序里的自定义设置, 包括程序里可以个性化设置而不能影响替他用户文件,临时文件夹,快速启动文件夹等.
简单地来说,都是用来存放软件的配置文件和临时文件的,里面有很多以软件名称或软件公司命名的文件夹。