2012-02-08 94 views
2

是否有可能使用Qt 4.7.4獲取Windows 7中的特殊文件夾列表我需要知道在哪個目錄中安裝了操作系統以及我已經寫入了哪些文件夾- 進入。 特殊文件夾將包含「桌面」,「程序數據」等文件夾。 這些文件夾可能隱藏,也可能不隱藏。在Windows中使用Qt查找特殊文件夾列表

我很感謝你的時間和迴應。 預先感謝您。

回答

1

您可以使用stdlib中的getenv

例如:您可以在環境變量windir下找到安裝操作系統的路徑。

其他例子:

  • APPDATA
  • COMPUTERNAME
  • PROGRAMFILES

你可以找到更多的例子here

代碼示例:

#include <stdlib.h> 
#include <cassert> 

int main(int argc, char* argv[]) 
{ 
    char* programs_path = getenv("programfiles"); 

    assert(programs_path); 

    return 0; 
} 

請記住檢查getenv是否返回null,特別是對於您自己設置的環境變量。

+1

Qt提供它自己的版本。 – UmNyobe 2012-02-08 09:17:30

2

有幾個可供選擇的列表:

  • 的Qt已經在QDesktopServices路徑許多(跨平臺)的。方法是QDesktopServices::storageLocation(StandardLocation)

  • 對於某些人,您可以使用qgetenv(如上所述)。

  • 如果一切都失敗了,您可以直接調用Shell32庫中的SHGetSpecialFolderPath方法。可能的選項列表可以在Microsoft's site找到。

這裏是最後的一個樣本:

static QString getWindowsPath(int path_to_get) 
{ 
    typedef BOOL (WINAPI*GetSpecialFolderPath)(HWND, LPWSTR, int, BOOL); 

    QLibrary shell32_lib(QLatin1String("shell32")); 
    GetSpecialFolderPath SHGetSpecialFolderPath = 
     (GetSpecialFolderPath)shell32_lib.resolve("SHGetSpecialFolderPathW"); 

    QScopedPointer<wchar_t> w_path(new wchar_t[MAX_PATH]); 
    SHGetSpecialFolderPath(0, w_path.data(), path_to_get, FALSE); 

    return QString::fromWCharArray(w_path.data()); 
} 

(實際上,SHGetSpecialFolderPath已被取代由SHGetKnownFolderPath作爲Vista的,所以如果你知道你只針對Windows 7,你應該使用它使用KNOWNFOLDERID值。)

+2

在Qt 5中,獲取特殊文件夾的方法已經從'QDesktopServices'移到['QStandardPaths'](http://qt-project.org/doc/qt-5.0/qtcore/qstandardpaths.html)。 – 2013-03-13 20:38:59

相關問題