Condividi tramite


Funzione CreateDirectory2W (fileapi.h)

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
0
0x00000000
Impedisce ad altri processi di aprire un file o un dispositivo se richiedono l'eliminazione, la lettura o l'accesso in scrittura.
FILE_SHARE_READ
0x00000001
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_WRITE
0x00000002
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_DELETE
0x00000004
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_REDIRECTS
0x00000001
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
Failover trasparente (TFO) SMB 3.0
SMB 3.0 con condivisioni file con scalabilità orizzontale (SO)
File system di volumi condivisi cluster (CsvFS)
Resilient File System (ReFS)

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

Vedere anche

CreateFile3

DeleteFile2

RemoveDirectory2