使用 Qt 在 Windows 中查找特殊文件夹列表

发布于 2025-01-04 06:27:44 字数 151 浏览 1 评论 0原文

是否可以使用 Qt 4.7.4 获取 Windows 7 中的特殊文件夹列表 我需要知道操作系统安装在哪个目录以及我对哪些文件夹具有写访问权限。 特殊文件夹将包括“桌面”、“程序数据”等文件夹...... 这些文件夹可能会也可能不会隐藏。

感谢您的时间和回复。 先感谢您。

Is it possible to get a list of the Special Folders in Windows 7 using Qt 4.7.4
I need to know in which directory the Operating System is installed and which folders I have write- access to.
Special Folders will include folders like 'Desktop', 'Program Data', etc....
These folders may or may not be hidden.

I appreciate your time and response.
Thank you in advance.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

┾廆蒐ゝ 2025-01-11 06:27:44

一些选项:

  • Qt 已经在 QDesktopServices 中提供了通往其中许多(跨平台)的路径。该方法是QDesktopServices::storageLocation(StandardLocation)

  • 对于某些情况,您可以使用qgetenv(如上所述)。

  • 如果以上方法均失败,您可以直接调用 Shell32 库中的 SHGetSpecialFolderPath 方法。可以在 微软网站

以下是最后一个示例:(

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,您应该使用它来代替。 rel="nofollow">KNOWNFOLDERID 值。)

A few options:

  • Qt already has paths to many of these (cross-platform) in QDesktopServices. The method is QDesktopServices::storageLocation(StandardLocation).

  • For some, you can use qgetenv (as mentioned above).

  • If all else fails, you can directly call the SHGetSpecialFolderPath method in the Shell32 library. The list of possible options can be found on Microsoft's site.

Here is a sample of the last:

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());
}

(Actually, SHGetSpecialFolderPath has been superseded by SHGetKnownFolderPath as of Vista, so if you know you are only targeting Windows 7, you should use that instead. It uses a KNOWNFOLDERID value.)

星軌x 2025-01-11 06:27:44

您可以使用 stdlib 中的 getenv

例如:您可以在环境变量windir下找到操作系统的安装路径。

其他示例:

  • APPDATA
  • COMPUTERNAME
  • PROGRAMFILES

您可以在此处找到更多示例

代码示例:

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

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

    assert( programs_path );

    return 0;
}

记住检查是否getenv 返回 null,特别是对于您自己设置的环境变量。

You could use the getenv from stdlib.

For example: You can find the path where the OS is installed under the environment variable windir.

Other examples:

  • APPDATA
  • COMPUTERNAME
  • PROGRAMFILES

You can find more examples here

Code example:

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

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

    assert( programs_path );

    return 0;
}

Remember to check if getenv returned null, especially for environment variables which you set yourself.

〃温暖了心ぐ 2025-01-11 06:27:44

尝试使用 QtGlobal::qgetenv。它获取环境变量,并且 这里是 Windows 7 上可用的变量列表。

Try using QtGlobal::qgetenv. It get the environment variables, and here is the list of variables available on windows 7.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文