Condividi tramite


Funzione MoveFileTransactedW (winbase.h)

[Microsoft consiglia vivamente agli sviluppatori di usare mezzi alternativi per raggiungere le esigenze dell'applicazione. Molti scenari sviluppati da TxF possono essere ottenuti tramite tecniche più semplici e più leggibili. Inoltre, TxF potrebbe non essere disponibile nelle versioni future di Microsoft Windows. Per altre informazioni e alternative a TxF, vedere Alternative all'uso di NTFS transazionale.

Sposta un file esistente o una directory, inclusi i relativi elementi figlio, come operazione transazionata.

Sintassi

BOOL MoveFileTransactedW(
  [in]           LPCWSTR            lpExistingFileName,
  [in, optional] LPCWSTR            lpNewFileName,
  [in, optional] LPPROGRESS_ROUTINE lpProgressRoutine,
  [in, optional] LPVOID             lpData,
  [in]           DWORD              dwFlags,
  [in]           HANDLE             hTransaction
);

Parametri

[in] lpExistingFileName

Nome corrente del file o della directory esistente nel computer locale.

Per impostazione predefinita, il nome è limitato a MAX_PATH caratteri. Per estendere questo limite a 32.767 caratteri wide, prependo "\\?\" al percorso. Per altre informazioni, vedere Denominazione di file, percorsi e spazi dei nomi.

Suggerimento

A partire da Windows 10, versione 1607, è possibile scegliere di rimuovere la limitazione MAX_PATH senza pre sospeso "\\?\". Per informazioni dettagliate, vedere la sezione "Limitazione massima lunghezza percorso" di nomi, nomi, percorsi e spazi dei nomi .

[in, optional] lpNewFileName

Nuovo nome per il file o la directory. Il nuovo nome non deve già esistere. Un nuovo file può trovarsi in un file system o un'unità diversa. Una nuova directory deve trovarsi nella stessa unità.

Per impostazione predefinita, il nome è limitato a MAX_PATH caratteri. Per estendere questo limite a 32.767 caratteri wide, prependo "\\?\" al percorso. Per altre informazioni, vedere Denominazione di file, percorsi e spazi dei nomi.

Suggerimento

A partire da Windows 10, versione 1607, è possibile scegliere di rimuovere la limitazione MAX_PATH senza pre sospeso "\\?\". Per informazioni dettagliate, vedere la sezione "Limitazione massima lunghezza percorso" di nomi, nomi, percorsi e spazi dei nomi .

[in, optional] lpProgressRoutine

Puntatore a una funzione di callback CopyProgressRoutine 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 funzione di callback CopyProgressRoutine . 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 riesce a lasciare intatto il file di origine.

Questo valore non può essere usato con MOVEFILE_DELAY_UNTIL_REBOOT.

MOVEFILE_CREATE_HARDLINK
16 (0x10)
Riservato per utilizzi futuri.
MOVEFILE_DELAY_UNTIL_REBOOT
4 (0x4)
Il sistema non sposta il file finché il sistema operativo non viene riavviato. 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 avvio precedenti.

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

Questo valore non può essere usato con MOVEFILE_COPY_ALLOWED.

L'operazione di scrittura al valore del Registro di sistema come descritto nella sezione Osservazioni è ciò che viene eseguito. Lo spostamento del file viene completato al riavvio del computer dopo il completamento della transazione.

MOVEFILE_REPLACE_EXISTING
1 (0x1)
Se esiste un file denominato lpNewFileName , la funzione sostituisce il contenuto del file lpExistingFileName .

Questo valore non può essere usato se lpNewFileName o lpExistingFileName assegna un nome a una directory.

MOVEFILE_WRITE_THROUGH
8 (0x8)
Una chiamata a MoveFileTransacted indica che l'operazione di spostamento del file viene completata al termine dell'operazione di commit. Questo flag non è necessario; non ci sono effetti negativi se questo flag è specificato, diverso da un rallentamento dell'operazione. La funzione non restituisce fino a quando il file non è stato effettivamente spostato sul disco.

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

Questo valore non ha alcun effetto se MOVEFILE_DELAY_UNTIL_REBOOT è impostato.

[in] hTransaction

Handle per la transazione. Questo handle viene restituito dalla funzione CreateTransaction .

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 informazioni dettagliate sull'errore, chiamare GetLastError.

Quando si sposta un file tra volumi, se lpProgressRoutine restituisce PROGRESS_CANCEL a causa dell'utente che annulla l'operazione, MoveFileTransacted restituirà zero e GetLastError restituirà ERROR_REQUEST_ABORTED. Il file esistente è rimasto intatto.

Quando si sposta un file tra volumi, se lpProgressRoutine restituisce PROGRESS_STOP a causa dell'arresto dell'operazione, MoveFileTransacted restituirà zero e GetLastError restituirà ERROR_REQUEST_ABORTED. Il file esistente è rimasto intatto.

Commenti

Se il parametro dwFlags specifica MOVEFILE_DELAY_UNTIL_REBOOT, MoveFileTransacted ha esito negativo se non riesce ad accedere al Registro di sistema. La funzione archivia in modo transazionale i percorsi dei file da rinominare al riavvio nel valore del Registro di sistema seguente: HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Session Manager\PendingFileRenameOperations

Questo valore del Registro di sistema è di tipo REG_MULTI_SZ. Ogni operazione di ridenominazione archivia una delle stringhe con terminazione NULL seguenti, a seconda che la ridenominazione sia un'eliminazione o meno:

szDstFile\0\0

szSrcFile\0szDstFile\0

La stringa szDstFile\0\0 indica che il file szDstFile deve essere eliminato al riavvio.

La stringa szSrcFile\0 szDstFile\0 indica che szSrcFile deve essere rinominato szDstFile al riavvio.

Nota Anche se \0\0 non è tecnicamente consentito in un nodo REG_MULTI_SZ , può perché il file viene considerato rinominato in un nome Null.
 
Il sistema usa queste voci del Registro di sistema per completare le operazioni al riavvio nello stesso ordine di emissione. Per altre informazioni sull'uso del flag di MOVEFILE_DELAY_UNTIL_REBOOT , vedere MoveFileWithProgress.

Se un file viene spostato tra volumi, MoveFileTransacted non sposta il descrittore di sicurezza con il file. Il file viene assegnato al descrittore di sicurezza predefinito nella directory di destinazione.

Questa funzione ha sempre esito negativo se si specifica il flag di MOVEFILE_FAIL_IF_NOT_TRACKABLE ; il rilevamento non è supportato da TxF.

In Windows 8 e Windows Server 2012 questa funzione è supportata dalle tecnologie seguenti.

Tecnologia Supportato
Protocollo SMB (Server Message Block) 3.0 No
Failover trasparente SMB 3.0 (TFO) No
SMB 3.0 con condivisioni file con scalabilità orizzontale (SO) No
File system del volume condiviso cluster (CsvFS) No
Resilient File System (ReFS) No
 

SMB 3.0 non supporta TxF.

Requisiti

Requisito Valore
Client minimo supportato Windows Vista [solo app desktop]
Server minimo supportato Windows Server 2008 [solo app desktop]
Piattaforma di destinazione Windows
Intestazione winbase.h (include Windows.h)
Libreria Kernel32.lib
DLL Kernel32.dll

Vedere anche

CopyFileTransacted

Funzioni di gestione file

MoveFileWithProgress

NTFS transazionale