c ++ - Windows: Overskriv fil under brug

Indlæg af Hanne Mølgaard Plasc

Problem



Jeg forsøger at skrive et værktøj, der gør det muligt at flytte filer i Windows, og når det finder en fil i brug, vil den pågældende fil blive flyttet ved genstart.


Det ser ud til, at MoveFileEx (http://msdn.microsoft.com/en-us/library/aa365240(VS.85).aspx) er det rigtige opkald til dette, men jeg kan ikke finde ud af, hvilken fejlkode jeg leder efter fra GetLastError (http://msdn.microsoft.com/en-us/library/ms679360(VS.85).aspx) for at se, at filen var i brug. [3] [4]


Jeg vil have hjælpeprogrammet til at mislykkes, når der er et faktisk tilladelsesproblem. Er der alligevel at differentiere en du-can 't-write-there og en overskrivningsfejl i brug?


Også, hvis jeg har de filer, jeg flytter i brugerens midlertidige mappe, bliver de slettet før det forsinkede omdøb?

Bedste reference


Du skal først ringe til CreateFile for at se, om filen er i brug. [5]


For at se, om filen er i brug:


Hvis du får et gyldigt filhåndtag, ved du, at filen ikke har modstridende delingsrettigheder med en proces, der allerede har denne fil åben.


Hvis du angiver ingen delingsadgang (0 til dwShareMode-parameteren i CreateFile-opkaldet), får du ikke et filhåndtag, hvis en anden proces i øjeblikket bruger den pågældende fil på nogen måde. GetLastError i dette tilfælde ville returnere: ERROR\_SHARING\_VIOLATION (32)





For at se, om der er et sikkerhedsproblem med adgang til filen:


For at se, om der er et tilladelsesproblem, der har adgang til den pågældende fil, fejler CreateFile-opkaldet også med en anden GetLastError. Du får: ERROR\_ACCESS\_DENIED (5)