Struttura SHFILEOPSTRUCTA (shellapi.h)

Contiene informazioni utilizzate dalla funzione SHFileOperation per eseguire operazioni sui file.

Nota A partire da Windows Vista, è consigliabile usare l'interfaccia IFileOperation .
 

Sintassi

typedef struct _SHFILEOPSTRUCTA {
  HWND         hwnd;
  UINT         wFunc;
  PCZZSTR      pFrom;
  PCZZSTR      pTo;
  FILEOP_FLAGS fFlags;
  BOOL         fAnyOperationsAborted;
  LPVOID       hNameMappings;
  PCSTR        lpszProgressTitle;
} SHFILEOPSTRUCTA, *LPSHFILEOPSTRUCTA;

Membri

hwnd

Tipo: HWND

Handle di finestra per la finestra di dialogo per visualizzare informazioni sullo stato dell'operazione file.

wFunc

Tipo: UINT

Valore che indica l'operazione da eseguire. Uno dei valori seguenti:

FO_COPY

Copiare i file specificati nel membro pFrom nel percorso specificato nel membro pTo.

FO_DELETE

Eliminare i file specificati in pFrom.

FO_MOVE

Spostare i file specificati in pFrom nel percorso specificato in pTo.

FO_RENAME

Rinominare il file specificato in pFrom. Non è possibile usare questo flag per rinominare più file con una singola chiamata di funzione. Usare invece FO_MOVE.

pFrom

Tipo: PCZZTSTR

Nota Questa stringa deve essere con terminazione double-null.
 
Puntatore a uno o più nomi di file di origine. Questi nomi devono essere percorsi completi per evitare risultati imprevisti.

I caratteri jolly standard MS-DOS, ad esempio "*", sono consentiti solo nella posizione del nome file. L'uso di un carattere jolly altrove nella stringa determinerà risultati imprevedibili.

Anche se questo membro viene dichiarato come una singola stringa con terminazione Null, è in realtà un buffer che può contenere più nomi di file delimitati da null. Ogni nome di file viene terminato da un singolo carattere NULL. L'ultimo nome file viene terminato con un doppio carattere NULL ("\0\0") per indicare la fine del buffer.

pTo

Tipo: PCZZTSTR

Nota Questa stringa deve essere con terminazione double-null.
 
Puntatore al nome del file o della directory di destinazione. Questo parametro deve essere impostato su NULL se non viene usato. I caratteri jolly non sono consentiti. Il loro uso porterà a risultati imprevedibili.

Come pFrom, il membro pTo è anche una stringa con terminazione double-null e viene gestito in modo analogo. Tuttavia, pTo deve soddisfare le specifiche seguenti:

  • I caratteri jolly non sono supportati.
  • Le operazioni copia e spostamento possono specificare directory di destinazione che non esistono. In questi casi, il sistema tenta di crearli e in genere visualizza una finestra di dialogo per chiedere all'utente se vuole creare la nuova directory. Per eliminare questa finestra di dialogo e impostare automaticamente le directory, impostare il flag di FOF_NOCONFIRMMKDIR in fFlags.
  • Per le operazioni di copia e spostamento, il buffer può contenere più nomi di file di destinazione se il membro fFlags specifica FOF_MULTIDESTFILES.
  • Comprimere più nomi nella stringa pTo allo stesso modo di pFrom.
  • Usare percorsi completi. L'uso di percorsi relativi non è consentito, ma può avere risultati imprevedibili.

fFlags

Tipo: FILEOP_FLAGS

Flag che controllano l'operazione di file. Questo membro può accettare una combinazione dei flag seguenti.

FOF_ALLOWUNDO

Conservare le informazioni di annullamento, se possibile.

Prima di Windows Vista, le operazioni potrebbero essere annullate solo dallo stesso processo che ha eseguito l'operazione originale.

In Windows Vista e nei sistemi successivi l'ambito dell'annullamento è una sessione utente. Qualsiasi processo in esecuzione nella sessione utente può annullare un'altra operazione. Lo stato di annullamento viene mantenuto nel processo di Explorer.exe e, purché il processo sia in esecuzione, può coordinare le funzioni di annullamento.

Se il parametro del file di origine non contiene nomi di file e percorsi completi, questo flag viene ignorato.

FOF_CONFIRMMOUSE

Non utilizzato.

FOF_FILESONLY

Eseguire l'operazione solo sui file (non nelle cartelle) se viene specificato un nome di file con caratteri jolly (.).

FOF_MULTIDESTFILES

Il membro pTo specifica più file di destinazione (uno per ogni file di origine in pFrom) anziché una directory in cui devono essere scaricati tutti i file di origine.

FOF_NOCONFIRMATION

Rispondere con Sì a tutti i per qualsiasi finestra di dialogo visualizzata.

FOF_NOCONFIRMMKDIR

Non chiedere all'utente di confermare la creazione di una nuova directory se l'operazione ne richiede la creazione.

FOF_NO_CONNECTED_ELEMENTS

Versione 5.0. Non spostare i file connessi come gruppo. Spostare solo i file specificati.

FOF_NOCOPYSECURITYATTRIBS

Versione 4.71. Non copiare gli attributi di sicurezza del file. Il file di destinazione riceve gli attributi di sicurezza della nuova cartella.

FOF_NOERRORUI

Non visualizzare una finestra di dialogo all'utente se si verifica un errore.

FOF_NORECURSEREPARSE

Non utilizzato.

FOF_NORECURSION

Eseguire l'operazione solo nella directory locale. Non operare in modo ricorsivo in sottodirectory, ovvero il comportamento predefinito.

FOF_NO_UI

Windows Vista. Eseguire l'operazione in modo invisibile all'utente, senza presentare alcuna interfaccia utente. Equivale a FOF_SILENT | FOF_NOCONFIRMATION | FOF_NOERRORUI | FOF_NOCONFIRMMKDIR.

FOF_RENAMEONCOLLISION

Assegnare al file un nuovo nome in un'operazione di spostamento, copia o ridenominazione se esiste già un file con il nome di destinazione nella destinazione.

FOF_SILENT

Non visualizzare una finestra di dialogo di stato.

FOF_SIMPLEPROGRESS

Visualizzare una finestra di dialogo di stato, ma non visualizzare i singoli nomi di file mentre vengono gestiti.

FOF_WANTMAPPINGHANDLE

Se viene specificato FOF_RENAMEONCOLLISION e tutti i file sono stati rinominati, assegnare un oggetto mapping dei nomi contenente i nomi precedenti e nuovi al membro hNameMappings. Questo oggetto deve essere liberato usando SHFreeNameMappings quando non è più necessario.

FOF_WANTNUKEWARNING

Versione 5.0. Inviare un avviso se un file viene eliminato definitivamente durante un'operazione di eliminazione anziché riciclato. Questo flag esegue parzialmente l'override di FOF_NOCONFIRMATION.

fAnyOperationsAborted

Tipo: bool

Quando la funzione viene restituita, questo membro contiene TRUE se eventuali operazioni sui file sono state interrotte prima del completamento; in caso contrario, FALSE. Un'operazione può essere interrotta manualmente dall'utente tramite l'interfaccia utente oppure può essere interrotta automaticamente dal sistema se i flag FOF_NOERRORUI o FOF_NOCONFIRMATION sono stati impostati.

hNameMappings

Tipo: LPVOID

Quando la funzione viene restituita, questo membro contiene un handle per un oggetto di mapping dei nomi che contiene i nomi precedenti e nuovi dei file rinominati. Questo membro viene utilizzato solo se il membro fFlags include il flag FOF_WANTMAPPINGHANDLE. Per altri dettagli, vedere La sezione Osservazioni.

lpszProgressTitle

Tipo: PCTSTR

Puntatore al titolo di una finestra di dialogo di stato. Si tratta di una stringa con terminazione Null. Questo membro viene utilizzato solo se fFlags include il flag FOF_SIMPLEPROGRESS.

Osservazioni

Importante È necessario assicurarsi che i percorsi di origine e di destinazione siano terminati a doppio valore Null. Una stringa normale termina con un solo carattere Null. Se si passa tale valore nei membri di origine o di destinazione, la funzione non si rende conto quando ha raggiunto la fine della stringa e continuerà a leggere in memoria fino a quando non si tratta di un valore Null doppio casuale. Ciò può comportare almeno un sovraccarico del buffer ed eventualmente l'eliminazione imprevista di dati non correlati.
 
// WRONG
LPTSTR pszSource = L"C:\\Windows\\*";

// RIGHT
LPTSTR pszSource = L"C:\\Windows\\*\0";

Per tenere conto dei due caratteri Null terminanti, assicurarsi di creare buffer sufficientemente grandi da contenere MAX_PATH (che in genere include il singolo carattere Null di terminazione) più 1.

Non è possibile notare che i percorsi devono essere sempre percorsi completi. Se i membri pFrom o pTo sono nomi non qualificati, le directory correnti vengono ricavate dall'unità corrente globale e dalle impostazioni della directory come gestite dal GetCurrentDirectory e funzioni SetCurrentDirectory.

Se non si specifica un percorso completo, i fatti seguenti diventano pertinenti:

  • La mancanza di un percorso prima di un nome file non indica di SHFileOperation che questo file risiede nella radice della directory corrente.
  • La variabile di ambiente PATH non viene usata da SHFileOperation per determinare un percorso valido.
  • SHFileOperation non può essere utilizzato per usare la directory corrente quando inizia l'esecuzione. La directory visualizzata come la directory corrente è a livello di processo e può essere modificata da un altro thread durante l'esecuzione dell'operazione. Se ciò dovesse accadere, i risultati di SHFileOperation sarebbero imprevedibili.

Se pFrom è impostato su un nome file senza un percorso completo, l'eliminazione del file con FO_DELETE non lo sposta nel Cestino, anche se è impostato il flag FOF_ALLOWUNDO. È necessario specificare un percorso completo per eliminare il file nel Cestino.

SHFileOperation ha esito negativo in qualsiasi percorso preceduto da "\?".

Esistono due versioni di questa struttura, una versione ANSI (SHFILEOPSTRUCTA) e una versione Unicode (SHFILEOPSTRUCTW). La versione Unicode è identica alla versione ANSI, ad eccezione del fatto che le stringhe di caratteri wide (LPCWSTR) vengono usate al posto delle stringhe di caratteri ANSI (LPCSTR). In Windows 98 e versioni precedenti è supportata solo la versione ANSI. In Microsoft Windows NT 4.0 e versioni successive sono supportate sia le versioni ANSI che Unicode di questa struttura. SHFILEOPSTRUCTW e SHFILEOPTSTRUCTA non devono mai essere usati direttamente; la struttura appropriata viene ridefinita come SHFILEOPSTRUCT dal precompiler a seconda che l'applicazione sia compilata per ANSI o Unicode.

SHNAMEMAPPING include versioni ANSI e Unicode simili. Per le applicazioni ANSI, hNameMappings punta a un int seguito da una matrice di strutture SHNAMEMAPPING. Per le applicazioni Unicode, hNameMappings punta a un int seguito da una matrice di strutture unicode SHNAMEMAPPING. Tuttavia, in Microsoft Windows NT 4.0 e versioni successive, SHFileOperationsempre restituisce un handle a un set Unicode di strutture SHNAMEMAPPING. Se si vuole che le applicazioni funzionino con tutte le versioni di Windows, l'applicazione deve usare il codice condizionale per gestire i mapping dei nomi. Per esempio:

x = SHFileOperation(&shop);

if (fWin9x) 
    HandleAnsiNameMappings(shop.hNameMappings);
else 
    HandleUnicodeNameMappings(shop.hNameMappings);

Considerare hNameMappings come puntatore a una struttura i cui membri sono un valore UINT seguito da un puntatore a una matrice di strutture SHNAMEMAPPING, come illustrato nella dichiarazione:

struct HANDLETOMAPPINGS 
{
    UINT              uNumberOfMappings;  // Number of mappings in the array.
    LPSHNAMEMAPPING   lpSHNameMapping;    // Pointer to the array of mappings.
};

Il valore UINT indica il numero di strutture SHNAMEMAPPING nella matrice. Ogni struttura SHNAMEMAPPING contiene il percorso precedente e nuovo per uno dei file rinominati.

Nota L'handle deve essere liberato con SHFreeNameMappings.
 

Nota

L'intestazione shellapi.h definisce SHFILEOPSTRUCT 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 che non è indipendente dalla codifica può causare mancate corrispondenze che generano errori di compilazione o di runtime. Per altre informazioni, vedere convenzioni di per i prototipi di funzioni.

Fabbisogno

Requisito Valore
client minimo supportato Windows XP [solo app desktop]
server minimo supportato Windows 2000 Server [solo app desktop]
intestazione shellapi.h