Nota
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare ad accedere o modificare le directory.
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare a modificare le directory.
Crea una nuova cartella. Se il file system sottostante supporta la sicurezza su file e directory, la funzione applica un descrittore di sicurezza specificato alla nuova directory.
Per specificare una directory modello, usare la funzione CreateDirectoryEx .
Per eseguire questa operazione come operazione transazionata, utilizzare la funzione CreateDirectoryTransacted .
Sintassi
HANDLE CreateDirectory2W(
LPCWSTR lpPathName,
DWORD dwDesiredAccess,
DWORD dwShareMode,
DIRECTORY_FLAGS DirectoryFlags,
LPSECURITY_ATTRIBUTES lpSecurityAttributes
);
Parametri
lpPathName
Percorso della directory da creare.
Per impostazione predefinita, il nome è limitato a MAX_PATH caratteri. Per estendere questo limite a 32.767 caratteri wide, anteporre "\\?\" al percorso. Per altre informazioni, vedere Denominazione di file, percorsi e spazi dei nomi.
Suggerimento
È possibile acconsentire esplicitamente per rimuovere la limitazione MAX_PATH senza anteporre "\\?\". Per informazioni dettagliate, vedere la sezione "Limitazione massima della lunghezza del percorso" di Denominazione di file, percorsi e spazi dei nomi .
dwDesiredAccess
Valore ACCESS_MASK che esprime il tipo di accesso richiesto dal chiamante alla directory. Il set di flag dwDesiredAccess definiti dal sistema determina gli oggetti file di directory dei diritti di accesso specifici seguenti:
Valore | Significato |
---|---|
FILE_LIST_DIRECTORY | I file nella directory possono essere elencati. |
FILE_TRAVERSE | La directory può essere attraversata, ovvero può far parte del percorso di un file. |
SINCRONIZZARE | L'handle restituito può essere aspettato di eseguire la sincronizzazione con il completamento di un'operazione di I/O. Se l'handle non è stato aperto per l'I/O sincrono, questo valore viene ignorato. |
dwShareMode
Tipo di accesso condiviso che il chiamante desidera utilizzare nel file, come zero o come una o una combinazione dei valori seguenti:
Valore | Significato |
---|---|
00x00000000 |
Impedisce ad altri processi di aprire un file o un dispositivo se richiedono l'eliminazione, la lettura o l'accesso in scrittura. |
FILE_SHARE_READ0x00000001 |
Consente alle successive operazioni aperte su un file o un dispositivo di richiedere l'accesso in lettura. In caso contrario, altri processi non possono aprire il file o il dispositivo se richiedono l'accesso in lettura. Se questo flag non è specificato, ma il file o il dispositivo è stato aperto per l'accesso in lettura, la funzione ha esito negativo. |
FILE_SHARE_WRITE0x00000002 |
Consente alle successive operazioni aperte su un file o un dispositivo di richiedere l'accesso in scrittura. In caso contrario, altri processi non possono aprire il file o il dispositivo se richiedono l'accesso in scrittura. Se questo flag non è specificato, ma il file o il dispositivo è stato aperto per l'accesso in scrittura o ha un mapping di file con accesso in scrittura, la funzione ha esito negativo. |
FILE_SHARE_DELETE0x00000004 |
Consente alle successive operazioni aperte su un file o un dispositivo di richiedere l'accesso per l'eliminazione. In caso contrario, altri processi non possono aprire il file o il dispositivo se richiedono l'accesso eliminato. Se questo flag non è specificato, ma il file o il dispositivo è stato aperto per l'accesso all'eliminazione, la funzione ha esito negativo. Nota: L'accesso eliminato consente sia le operazioni di eliminazione che di ridenominazione. |
DirectoryFlags
Questo parametro può contenere combinazioni di DIRECTORY_FLAGS.
Valore | Significato |
---|---|
DIRECTORY_FLAGS_DISALLOW_PATH_REDIRECTS0x00000001 |
Impedisci il reindirizzamento di lpPathName da punti reparse o collegamenti simbolici. |
lpSecurityAttributes
Puntatore a una struttura SECURITY_ATTRIBUTES . Il membro lpSecurityDescriptor della struttura specifica un descrittore di sicurezza per la nuova directory. Se lpSecurityAttributes è NULL
, la directory ottiene un descrittore di sicurezza predefinito. Gli elenchi di controllo di accesso nel descrittore di sicurezza predefinito per una directory vengono ereditati dalla directory padre.
Il file system di destinazione deve supportare la sicurezza dei file e delle directory affinché questo parametro abbia effetto. Questo è indicato quando GetVolumeInformation restituisceFS_PERSISTENT_ACLS.
Valore restituito
Se la funzione ha esito positivo, il valore restituito è diverso da zero.
Se la funzione ha esito negativo, il valore restituito è zero. Per ottenere informazioni estese sull'errore, chiamare GetLastError.
I possibili errori includono quanto segue:
Codice restituito | Descrizione |
---|---|
ERRORE_GIA_ESISTENTE | La directory specificata esiste già. |
ERROR_PATH_NOT_FOUND | Una o più directory intermedie non esistono; questa funzione creerà solo la directory finale nel percorso. |
Osservazioni:
Alcuni file system, ad esempio il file system NTFS, supportano la compressione o la crittografia per singoli file e directory. Nei volumi formattati per un file system di questo tipo, una nuova directory eredita gli attributi di compressione e crittografia della directory padre.
Un'applicazione può ottenere un handle in una directory chiamando CreateFile con il flag FILE_FLAG_BACKUP_SEMANTICS impostato. Per un esempio di codice, vedere CreateFile.
Per supportare funzioni di ereditarietà che eseguono query sul descrittore di sicurezza di questo oggetto possono determinare e segnalare in modo euristico che l'ereditarietà è attiva. Per altre informazioni, vedere Propagazione automatica degli ACL ereditabili .
Questa funzione è supportata dalle tecnologie seguenti:
Tecnologia | Sostenuto |
---|---|
Protocollo SMB (Server Message Block) 3.0 | Sì |
Failover trasparente (TFO) SMB 3.0 | Sì |
SMB 3.0 con condivisioni file con scalabilità orizzontale (SO) | Sì |
File system di volumi condivisi cluster (CsvFS) | Sì |
Resilient File System (ReFS) | Sì |
Annotazioni
L'intestazione fileapi.h
definisce CreateDirectory2 come alias che seleziona automaticamente la versione ANSI o Unicode di questa funzione in base alla definizione della costante del preprocessore UNICODE. La combinazione dell'utilizzo dell'alias indipendente dalla codifica con il codice non indipendente dalla codifica può causare mancate corrispondenze che generano errori di compilazione o di runtime. Per ulteriori informazioni, vedere Convenzioni per i prototipi di funzioni.
Esempi
Nell'esempio seguente viene creata una nuova directory con la funzione CreateDirectory2 . La nuova directory viene creata con i diritti di accesso FILE_LIST_DIRECTORY e SYNCHRONIZE . La nuova directory viene creata anche con la modalità di condivisione FILE_SHARE_READ , che consente ad altri processi di aprire la directory per l'accesso in lettura.
// 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);
}
Per altri esempi, vedere Recupero e modifica degli attributi del file.
Requisiti
Requisito | Valore |
---|---|
Client minimo supportato | Windows 11 24H2 [app desktop | App UWP] |
server minimo supportato | Windows Server 2025 [app desktop | App UWP] |
intestazione | fileapi.h (include Windows.h) |
Biblioteca | kernel32.lib |
DLL | Kernel32.dll |