Funzione MoveFileWithProgressA (winbase.h)
Sposta un file o una directory, inclusi i relativi elementi figlio. È possibile fornire una funzione di callback che riceve notifiche sullo stato di avanzamento.
Per eseguire questa operazione come operazione transazionata, usare la funzione MoveFileTransacted
Sintassi
BOOL MoveFileWithProgressA(
[in] LPCSTR lpExistingFileName,
[in, optional] LPCSTR lpNewFileName,
[in, optional] LPPROGRESS_ROUTINE lpProgressRoutine,
[in, optional] LPVOID lpData,
[in] DWORD dwFlags
);
Parametri
[in] lpExistingFileName
Nome del file o della directory esistente nel computer locale.
Se dwFlags specifica MOVEFILE_DELAY_UNTIL_REBOOT, il file non può esistere in una condivisione remota perché le operazioni ritardate vengono eseguite prima che la rete sia disponibile.
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.
Mancia
A partire da Windows 10, versione 1607, è possibile acconsentire esplicitamente alla rimozione della limitazione MAX_PATH senza anteporre "\\?\". Per informazioni dettagliate, vedere la sezione "Limitazione massima della lunghezza del percorso" di nomi, percorsi e spazi dei nomi.
[in, optional] lpNewFileName
Nuovo nome del file o della directory nel computer locale.
Quando si sposta un file, lpNewFileName può trovarsi in un file system o un volume diverso. Se lpNewFileName si trova in un'altra unità, è necessario impostare il flag di MOVEFILE_COPY_ALLOWED in dwFlags.
Quando si sposta una directory, lpExistingFileName e lpNewFileName devono trovarsi nella stessa unità.
Se
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.
Mancia
A partire da Windows 10, versione 1607, è possibile acconsentire esplicitamente alla rimozione della limitazione MAX_PATH senza anteporre "\\?\". Per informazioni dettagliate, vedere la sezione "Limitazione massima della lunghezza del percorso" di nomi, percorsi e spazi dei nomi.
[in, optional] lpProgressRoutine
Puntatore a un CopyProgressRoutine funzione di callback chiamata ogni volta che è stata spostata un'altra parte del file. La funzione di callback può essere utile se si fornisce un'interfaccia utente che visualizza lo stato di avanzamento dell'operazione. Questo parametro può essere NULL.
[in, optional] lpData
Argomento da passare alla CopyProgressRoutine funzione di callback. Questo parametro può essere NULL.
[in] dwFlags
Opzioni di spostamento. Questo parametro può essere uno o più dei valori seguenti.
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.
Quando si sposta un file tra volumi, se lpProgressRoutine restituisce PROGRESS_CANCEL a causa dell'annullamento dell'operazione da parte dell'utente, MoveFileWithProgress restituirà zero e GetLastError restituirà ERROR_REQUEST_ABORTED. Il file esistente rimane intatto.
Quando si sposta un file tra volumi, se lpProgressRoutine restituisce PROGRESS_STOP a causa dell'arresto dell'operazione da parte dell'utente, MoveFileWithProgress restituirà zero e GetLastError restituirà ERROR_REQUEST_ABORTED. Il file esistente rimane intatto.
Osservazioni
La funzione MoveFileWithProgress coordina l'operazione con il servizio di rilevamento dei collegamenti, in modo che le origini di collegamento possano essere rilevate durante lo spostamento.
Per eliminare o rinominare un file, è necessario disporre dell'autorizzazione di eliminazione per il file o eliminare l'autorizzazione figlio nella directory padre. Se si configura una directory con tutti gli accessi ad eccezione dell'eliminazione e dell'eliminazione figlio e gli ACL dei nuovi file vengono ereditati, sarà possibile creare un file senza poterlo eliminare. Tuttavia, è possibile creare un file e si otterrà tutto l'accesso richiesto sull'handle restituito al momento della creazione del file. Se è stata richiesta l'autorizzazione di eliminazione al momento della creazione del file, è possibile eliminare o rinominare il file con tale handle ma non con altri.
In Windows 8 e Windows Server 2012 questa funzione è supportata dalle tecnologie seguenti.
Tecnologia | Sostenuto |
---|---|
Protocollo SMB (Server Message Block) 3.0 | Sì |
SMB 3.0 Transparent Failover (TFO) | Sì |
SMB 3.0 con condivisioni file con scalabilità orizzontale (SO) | Sì |
Cluster Shared Volume File System (CsvFS) | Sì |
Resilient File System (ReFS) | Sì |
CsvFs eseguirà il reindirizzamento di I/O per i file compressi.
Nota
L'intestazione winbase.h definisce MoveFileWithProgress 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 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 Server 2003 [solo app desktop] |
piattaforma di destinazione | Finestre |
intestazione |
winbase.h (include Windows.h) |
libreria |
Kernel32.lib |
dll | Kernel32.dll |