Найти список специальных папок в Windows, используя Qt - PullRequest
2 голосов
/ 08 февраля 2012

Можно ли получить список специальных папок в Windows 7 с помощью Qt 4.7.4 Мне нужно знать, в каком каталоге установлена ​​операционная система и в какие папки у меня есть доступ для записи.Специальные папки будут включать такие папки, как «Рабочий стол», «Программные данные» и т. Д. Эти папки могут быть скрыты или не скрываться.

Я ценю ваше время и ответ.Заранее спасибо.

Ответы [ 3 ]

2 голосов
/ 08 февраля 2012

Несколько вариантов:

  • Qt уже имеет пути ко многим из них (кроссплатформенный) в QDesktopServices .Метод QDesktopServices::storageLocation(StandardLocation).

  • Для некоторых вы можете использовать qgetenv (как упомянуто выше).

  • Если ничего не помогает, вы можете напрямую вызвать метод SHGetSpecialFolderPath в библиотеке Shell32.Список возможных вариантов можно найти на сайте Microsoft .

Вот пример последнего:

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 .)

1 голос
/ 08 февраля 2012

Вы можете использовать getenv из stdlib.

Например: вы можете найти путь, где установлена ​​ОС, в переменной среды 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 ноль, особенно для переменных окружения, которые вы установили самостоятельно.

0 голосов
/ 08 февраля 2012

Попробуйте использовать QtGlobal :: qgetenv .Он получает переменные окружения, и здесь - это список переменных, доступных в Windows 7.

...