Примечание
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
Создает новый каталог. Если базовая файловая система поддерживает безопасность файлов и каталогов, функция применяет указанный дескриптор безопасности к новому каталогу.
Чтобы указать каталог шаблона, используйте функцию CreateDirectoryEx .
Чтобы выполнить эту операцию как транзакционная операция, используйте функцию CreateDirectoryTransacted .
Синтаксис
HANDLE CreateDirectory2A(
LPCSTR lpPathName,
DWORD dwDesiredAccess,
DWORD dwShareMode,
DIRECTORY_FLAGS DirectoryFlags,
LPSECURITY_ATTRIBUTES lpSecurityAttributes
);
Параметры
lpPathName
Путь к созданному каталогу.
По умолчанию имя ограничено MAX_PATH символами. Чтобы расширить это ограничение до 32 767 расширенных символов, добавьте "\\?\" в путь. Дополнительные сведения см. в разделе Именование файлов, путей и пространств имен.
Подсказка
Вы можете отказаться от ограничения MAX_PATH без предварительного добавления "\\?\". Дополнительные сведения см. в разделе "Ограничение максимальной длины пути" именования файлов, путей и пространств имен .
dwDesiredAccess
Значение ACCESS_MASK , которое выражает тип доступа, который вызывающий объект требует для каталога. Набор системных флагов dwDesiredAccess определяет следующие объекты файлов каталога прав доступа:
Ценность | Значение |
---|---|
FILE_LIST_DIRECTORY | Файлы в каталоге можно перечислить. |
FILE_TRAVERSE | Каталог можно пройти по пути: т. е. он может быть частью имени пути файла. |
СИНХРОНИЗИРОВАТЬ | Возвращенный дескриптор можно дождаться синхронизации с завершением операции ввода-вывода. Если дескриптор не был открыт для синхронного ввода-вывода, это значение игнорируется. |
dwShareMode
Тип доступа к общей папке, который вызывающий объект хотел бы использовать в файле, как ноль, или как одно или сочетание следующих значений:
Ценность | Значение |
---|---|
00x00000000 |
Запрещает другим процессам открывать файл или устройство, если они запрашивают доступ на удаление, чтение или запись. |
FILE_SHARE_READ0x00000001 |
Позволяет последующим операциям открытия на файле или устройстве запрашивать доступ на чтение. В противном случае другие процессы не могут открыть файл или устройство, если они запрашивают доступ на чтение. Если этот флаг не указан, но файл или устройство было открыто для доступа на чтение, функция завершается ошибкой. |
FILE_SHARE_WRITE0x00000002 |
Позволяет последующим операциям открытия на файле или устройстве запрашивать доступ на запись. В противном случае другие процессы не могут открыть файл или устройство, если они запрашивают доступ на запись. Если этот флаг не указан, но файл или устройство было открыто для доступа на запись или имеет сопоставление файлов с доступом на запись, функция завершается ошибкой. |
FILE_SHARE_DELETE0x00000004 |
Позволяет последующим операциям открытия на файле или устройстве запрашивать доступ к удалению. В противном случае другие процессы не могут открыть файл или устройство, если они запрашивают доступ к удалению. Если этот флаг не указан, но файл или устройство было открыто для удаления, функция завершается ошибкой. Заметка: Доступ к удалению позволяет выполнять операции удаления и переименования. |
DirectoryFlags
Этот параметр может содержать сочетания DIRECTORY_FLAGS.
Ценность | Значение |
---|---|
DIRECTORY_FLAGS_DISALLOW_PATH_REDIRECTS0x00000001 |
Запрет перенаправления lpPathName с помощью точек повторного анализа или символьных ссылок. |
lpSecurityAttributes
Указатель на структуру SECURITY_ATTRIBUTES . Элемент lpSecurityDescriptor структуры задает дескриптор безопасности для нового каталога. Если lpSecurityAttributes имеет значение NULL
, каталог получает дескриптор безопасности по умолчанию. Списки управления доступом в дескрипторе безопасности по умолчанию для каталога наследуются от родительского каталога.
Целевая файловая система должна поддерживать безопасность файлов и каталогов, чтобы этот параметр повлиял. (Это указывает, когда GetVolumeInformation возвращает FS_PERSISTENT_ACLS.)
Возвращаемое значение
Если функция выполнена успешно, возвращаемое значение ненулевое.
Если функция завершается ошибкой, возвращаемое значение INVALID_HANDLE_VALUE. Чтобы получить расширенные сведения об ошибке, вызовите GetLastError.
Возможные ошибки:
Код возврата | Описание |
---|---|
ERROR_ALREADY_EXISTS | Указанный каталог уже существует. |
ERROR_PATH_NOT_FOUND | Один или несколько промежуточных каталогов не существуют; Эта функция создаст только окончательный каталог в пути. |
ERROR_PATH_REDIRECTED | lpNewDirectory перенаправляется точками повторного анализа и (или) символьными ссылками. |
Замечания
Некоторые файловые системы, такие как файловая система NTFS, поддерживают сжатие или шифрование отдельных файлов и каталогов. В томах, отформатированных для такой файловой системы, новый каталог наследует атрибуты сжатия и шифрования родительского каталога.
Приложение может получить дескриптор в каталог, вызвав CreateFile с набором флагов FILE_FLAG_BACKUP_SEMANTICS . Пример кода см. в разделе CreateFile.
Для поддержки функций наследования, запрашивающих дескриптор безопасности этого объекта, может эвристически определить и сообщить о том, что наследование действует. Дополнительные сведения см. в статье об автоматическом распространении наследуемых acES .
Эта функция поддерживается следующими технологиями:
Технология | Поддерживается |
---|---|
Протокол SMB 3.0 | Да |
Отработка отказа SMB 3.0 (TFO) | Да |
SMB 3.0 с масштабируемыми общими папками (SO) | Да |
Файловая система общего тома кластера (CSVFS) | Да |
Отказоустойчивая файловая система (ReFS) | Да |
Примечание.
Заголовок fileapi.h
определяет CreateDirectory2 как псевдоним, который автоматически выбирает версию ANSI или Юникод этой функции на основе определения константы препроцессора ЮНИКОДа. Сочетание использования псевдонима, нейтрального для кодирования, с кодом, не зависящим от кодирования, может привести к несоответствиям, которые приводят к ошибкам компиляции или среды выполнения. Дополнительные сведения см. в соглашениях о прототипах функций.
Примеры
В следующем примере создается новый каталог с функцией CreateDirectory2 . Новый каталог создается с помощью прав доступа FILE_LIST_DIRECTORY и SYNCHRONIZE . Новый каталог также создается в режиме общего доступа FILE_SHARE_READ , что позволяет другим процессам открывать каталог для доступа на чтение.
// THIS CODE AND INFORMATION IS PROVIDED "AS IS" WITHOUT WARRANTY OF
// ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING BUT NOT LIMITED TO
// THE IMPLIED WARRANTIES OF MERCHANTABILITY AND/OR FITNESS FOR A
// PARTICULAR PURPOSE.
//
// Copyright (C) Microsoft. All rights reserved
#include <Windows.h>
#include <stdio.h>
#include <strsafe.h>
int main(int argc, wchar_t* argv[])
{
WCHAR filePath[MAX_PATH] = { 0 };
// Create a directory to put a file into, that can't be deleted
// and redirected before this handle is closed.
HANDLE hDirectory = CreateDirectory2(argv[1],
FILE_LIST_DIRECTORY | SYNCHRONIZE,
FILE_SHARE_READ,
DIRECTORY_FLAGS_NONE,
NULL,
NULL);
if (hDirectory == INVALID_HANDLE_VALUE)
{
// Handle the error.
printf("CreateDirectory2 failed (%d)\n", GetLastError());
return (1);
}
StringCchPrintf(filePath,
ARRAYSIZE(filePath),
L"%ws\\example.test",
argv[1]);
HANDLE hFile = CreateFile3(filePath,
GENERIC_ALL,
FILE_SHARE_READ,
CREATE_ALWAYS,
NULL);
if (hFile == INVALID_HANDLE_VALUE)
{
// Handle the error.
CloseHandle(hDirectory);
printf("CreateFile3 failed (%d)\n", GetLastError());
return (1);
}
CloseHandle(hFile);
CloseHandle(hDirectory);
return (0);
}
Дополнительные примеры см. в разделе "Получение и изменение атрибутов файла".
Требования
Требование | Ценность |
---|---|
Минимально поддерживаемый клиент | Windows 11 24H2 [классические приложения | Приложения UWP] |
минимальный поддерживаемый сервер | Windows Server 2025 [классические приложения | Приложения UWP] |
Заголовок | fileapi.h (включая Windows.h) |
Библиотека | Файл Kernel32.lib |
Библиотека dll | Kernel32.dll |