1. Акция на весь декабрь! Получай оплату х2 за уникальные статьи, объемом от 200 слов, если в заголовке темы и теле статьи присутствует слово Python
    Скрыть объявление

Установка атрибутов папки сжатый или зашифрованный.

Тема в разделе "MS Visual C++", создана пользователем Indahaus, 28 окт 2010.

  1. Indahaus

    Indahaus Гость

    Весь инет перерыл ничего толком не нашёл, как установить именно папку сжатой или зашифрованной и наоборот.
    SetFileAttributes("C:\\Test", FILE_ATTRIBUTE_NORMAL); // устанавливает только как обычную не скрытую и не системную папку. А типы "сжатый" или "зашифрованный" вообще не трогает.

    Пытался сделать так:
    Код (C++):
    HANDLE hFile=NULL;
    unsigned int iCompression=0; // для сжатого файла, т.е. сбросить тип сжатый.

    hFile = CreateFile("C:\\Test", GENERIC_READ | GENERIC_WRITE, 0, NULL, OPEN_EXISTING, 0, 0);
    if (INVALID_HANDLE_VALUE == hFile) {
    return false;
    }

    if (iCompress == 1) {
    iCompression = COMPRESSION_FORMAT_DEFAULT;
    } else {
    iCompression = COMPRESSION_FORMAT_NONE;
    }
    DWORD dw=0;
    if (FALSE == DeviceIoControl(hFile, FSCTL_SET_COMPRESSION, &iCompression, sizeof(unsigned int), NULL, 0, &dw, NULL)) {
    CloseHandle(hFile);
    hFile = NULL;
    return false;
    }
    CloseHandle(hFile);
    hFile = NULL;
    return true;
    но действует только на файлы! а на папки не действует вообще.
    Как получить дескриптор папки от CreateFile или хотя бы с помощью другой функции? или можно как-то другим способом сделать?

    Также и шифрование и дешифрование соответственно функции EncryptFile и DecryptFile - только для файлов, а на папки вообще не действует. Помогите пожалуйста.
     
  2. DarkKnight

    DarkKnight Well-Known Member
    C\C++ Team

    Регистрация:
    1 авг 2010
    Сообщения:
    653
    Симпатии:
    0
    Вообщем то бы тебе дескриптор папки получить, то нужно юзать CreateFile с флагом FILE_FLAG_BACKUP_SEMANTICS, это одна из его малодокументированных функций..

    Добавлено: Примерно так: HANDLE F = CreateFileA("debug", GENERIC_READ, 0 , NULL, OPEN_EXISTING, FILE_FLAG_BACKUP_SEMANTICS, NULL);
    Таким образом реализуется запрет на совместное использование папки несколькими программами, пока данный процесс не завершится (за это отвечает dwShareMode = 0), без использования FILE_FLAG_BACKUP_SEMANTICS ничего не выйдет и сам дескриптор (хандл) будет равен скорее всего 0xFFFFFFFF
     
Загрузка...
Похожие Темы - Установка атрибутов папки
  1. Shouldercannon
    Ответов:
    1
    Просмотров:
    2.436
  2. Serj100500
    Ответов:
    4
    Просмотров:
    38
  3. geliz
    Ответов:
    1
    Просмотров:
    687
  4. Vander
    Ответов:
    14
    Просмотров:
    2.534
  5. lionk
    Ответов:
    4
    Просмотров:
    751

Поделиться этой страницей