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 幫助文件的解釋,這個方法可以確保返回的路徑非空。所以我認為應該優先選用這個方法。
臨時檔案路徑
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 類的介紹。
---------------------
原文:https://blog.csdn.net/liyuanbhu/article/details/53710249
相關文章
- 獲取使用者臨時資料夾路徑
- VC 獲取系統特殊資料夾的路徑如:系統目錄,桌面等
- C# WinForm獲取程式所在路徑方法C#ORM
- Java獲取WEB目錄路徑JavaWeb
- 取得某些特殊資料夾路徑
- JavaScript 獲取目錄絕對路徑JavaScript
- [Swift] iOS中的目錄路徑以及獲取方法SwiftiOS
- Xcode外掛路徑、快取路徑、圖片壓縮工具路徑、程式碼片段路徑、symbolicatecrash路徑XCode快取Symbol
- c++ winapi 獲取當前程式/工程所在路徑C++API
- java獲取硬碟根目錄的本地路徑Java硬碟
- linux下獲取程式當前目錄絕對路徑Linux
- golang 獲取當前路徑和上一級父路徑(目錄)Golang
- C# 獲取專案程式路徑的方法C#
- PHP 常用獲取路徑程式碼PHP
- 在laravel框架中獲取storage目錄的路徑Laravel框架
- js獲取當前目錄的絕對路徑程式碼例項JS
- IOS中獲取各種檔案的目錄路徑的方法iOS
- 獲取微信小程式頁面路徑微信小程式
- JAVA 取得當前目錄的路徑/Servlet/class/檔案路徑/web路徑/url地址JavaServletWeb
- 如何更改臨時資料夾路徑 最佳化WIN7臨時資料夾技巧Win7
- Win7臨時資料夾路徑 Win7系統的臨時資料夾在哪Win7
- iOS中獲取各種檔案的目錄路徑的方法(轉)iOS
- Qt的相對路徑轉為絕對路徑QT
- nodejs遞迴資料夾獲取所有檔案路徑NodeJS遞迴
- win10 如何更改桌面資料夾路徑 win10 更換桌面路徑方法Win10
- java中獲取類載入路徑和專案根路徑的5種方法Java
- svg獲取路徑的長度SVG
- python獲取指定目錄所有檔案絕對路徑Python
- Java - 獲取ClassPath的路徑和資源Java
- win10桌面資料夾路徑位置在哪_w10桌面資料夾路徑如何開啟Win10
- python獲取程式執行檔案路徑的方法其一Python
- C# 獲取程式路徑的幾種方法及其區別【WPF】C#
- windows C++ 獲取使用者桌面路徑WindowsC++
- C#.net 獲取當前應用程式所在路徑及環境變數C#變數
- Unity 編輯器中獲取選中的資料夾、檔案路徑Unity
- 兩種方法更改windows系統預設資料夾路徑(appdata等資料夾)WindowsAPP
- js獲取專案根路徑JS
- c#獲取路徑 c/sC#