Функция C stat () сообщает, что папка Windows Desktop доступна только для чтения - PullRequest
2 голосов
/ 02 ноября 2011

Очевидно, что мой рабочий стол не только для чтения, однако функции stat () и findfirst () сообщают об этом как недоступные для записи. Должен ли я использовать какую-то другую функцию вместо этого? Почему?

#include <iostream>
#include <ShlObj.h>
#include <sys/stat.h>

int main() {
    PWSTR ppszPath;
    if (::SHGetKnownFolderPath(FOLDERID_Desktop, 0, NULL, &ppszPath)==S_OK) {
        std::wcout << L"Desktop folder: " << ppszPath << L"\n";
        struct _stat64 buf;
        if (_wstat64(ppszPath, &buf)==0) {
            std::wcout << L"Writable: " << ( (buf.st_mode & _S_IWRITE) != 0? "yes": "no") << L"\n";
        }
    }
}

Это печатает на Windows7 x64:

Desktop folder: C:\Users\heldepn\Desktop
Writable: no

1 Ответ

3 голосов
/ 02 ноября 2011

Флаг «только для чтения» для каталогов является декоративным, и не контролирует возможность изменения содержимого каталога .Создание файлов в каталоге контролируется FILE_ADD_FILE, удаление файлов в каталоге контролируется FILE_DELETE_CHILD, а создание подкаталога контролируется FILE_ADD_SUBDIRECTORY.

...