Condividi tramite


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 dwFlags specifica MOVEFILE_DELAY_UNTIL_REBOOT e lpNewFileName è NULL, MoveFileWithProgress registra lpExistingFileName da eliminare al riavvio del sistema. La funzione ha esito negativo se non riesce ad accedere al Registro di sistema per archiviare le informazioni sull'operazione di eliminazione. Se lpExistingFileName fa riferimento a una directory, il sistema rimuove la directory al riavvio solo se la directory è vuota.

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 Significato
MOVEFILE_COPY_ALLOWED
2 (0x2)
Se il file deve essere spostato in un volume diverso, la funzione simula lo spostamento usando le funzioni CopyFile e DeleteFile.

Se il file viene copiato correttamente in un volume diverso e il file originale non può essere eliminato, la funzione ha esito positivo lasciando intatto il file di origine.

Questo valore non può essere usato con MOVEFILE_DELAY_UNTIL_REBOOT.

MOVEFILE_CREATE_HARDLINK
16 (0x10)
Riservato per uso futuro.
MOVEFILE_DELAY_UNTIL_REBOOT
4 (0x4)
Il sistema non sposta il file fino al riavvio del sistema operativo. Il sistema sposta il file immediatamente dopo l'esecuzione di AUTOCHK, ma prima di creare file di paging. Di conseguenza, questo parametro consente alla funzione di eliminare i file di paging dalle startup precedenti.

Questo valore può essere usato solo se il processo si trova nel contesto di un utente che appartiene al gruppo administrators o all'account LocalSystem.

Questo valore non può essere usato con MOVEFILE_COPY_ALLOWED.

MOVEFILE_FAIL_IF_NOT_TRACKABLE
32 (0x20)
La funzione ha esito negativo se il file di origine è un'origine di collegamento, ma non è possibile tenere traccia del file dopo lo spostamento. Questa situazione può verificarsi se la destinazione è un volume formattato con il file system FAT.
MOVEFILE_REPLACE_EXISTING
1 (0x1)
Se esiste un file denominato lpNewFileName, la funzione sostituisce il relativo contenuto con il contenuto del file lpExistingFileName.

Questo valore non può essere utilizzato se lpNewFileName o lpExistingFileName denominare una directory.

MOVEFILE_WRITE_THROUGH
8 (0x8)
La funzione non restituisce finché il file non viene effettivamente spostato sul disco.

L'impostazione di questo valore garantisce che uno spostamento eseguito come operazione di copia ed eliminazione venga scaricato su disco prima che la funzione venga restituita. Lo scaricamento si verifica alla fine dell'operazione di copia.

Questo valore non ha alcun effetto se MOVEFILE_DELAY_UNTIL_REBOOT è impostato.

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
SMB 3.0 Transparent Failover (TFO)
SMB 3.0 con condivisioni file con scalabilità orizzontale (SO)
Cluster Shared Volume File System (CsvFS)
Resilient File System (ReFS)
 

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

Vedere anche

CopyFileEx

CopyProgressRoutine

funzioni di gestione file

MoveFileEx

MoveFileTransacted