Domanda

Sto cercando di scrivere un programma di utilità che permetterà lo spostamento dei file in Windows, e quando trova un file in uso, metterò quel file da spostare al riavvio.

Sembra che MoveFileEx ( http: // msdn .microsoft.com / en-us / library / aa365240 (VS.85) .aspx ) è la scelta giusta per questo, però non riesco a capire che cosa il codice di errore che sto cercando da GetLastError ( http://msdn.microsoft.com/en-us/library/ ms679360 (VS.85) aspx ) per vedere che il file era in uso.

Voglio l'utilità di fallire quando c'è un problema reale di autorizzazioni. Esiste un modo per differenziare un errore che-non-scrittura là e un in uso sovrascrittura?

Inoltre, se ho i file mi sto muovendo nella cartella temporanea dell'utente, si ottengono eliminati prima la ridenominazione ritardata?

È stato utile?

Soluzione

Dovete chiamare CreateFile primo per vedere se il file è in uso.

Per vedere se il file è in uso:

Se si ottiene un handle di file valido poi si sa il file non ha le autorizzazioni di condivisione in conflitto con un processo che ha già questo file aperto.

Se si specifica nessun accesso condivisione (0 al parametro dwShareMode della chiamata CreateFile), quindi non sarà possibile ottenere un handle di file se qualsiasi altro processo sta utilizzando il file in alcun modo. GetLastError in questo caso sarebbe tornato: ERROR_SHARING_VIOLATION (32)


Per vedere se c'è un problema di sicurezza con l'accesso al file:

Per vedere se c'è un problema di autorizzazioni accesso quel file, la chiamata CreateFile sarà anche fallire, ma con un diverso GetLastError. Otterrete: ERROR_ACCESS_DENIED (5)

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top