Frage

Ich versuche, ein Programm zu schreiben, die Dateien in Windows zu bewegen erlauben wird, und wenn es eine Datei in Verwendung findet, wird diese Datei eingestellt bewegt beim Neustart werden.

Es scheint, dass MoveFileEx ( http: // msdn .microsoft.com / en-us / library / aa365240 (VS.85) aspx ) ist die richtige Entscheidung für diese, aber ich kann nicht herausfinden, was Codefehler für von GetLastError ich bin auf der Suche ( http://msdn.microsoft.com/en-us/library/ ms679360 (VS.85) aspx ), um zu sehen, dass die Datei in Gebrauch war.

Ich mag das Dienstprogramm zum Scheitern verurteilt, wenn es ein tatsächliches Berechtigungsproblem ist. Gibt es trotzdem ein you-can not write-dort und in Betrieb befindlichen Überschreibungsfehler zu unterscheiden?

Auch wenn ich die Dateien, die ich in der Benutzer temporären Ordner bewege, werden sie vor dem verzögerten Umbenennungs gelöscht werden?

War es hilfreich?

Lösung

Sie müssen rufen Create zuerst zu sehen, ob die Datei in Gebrauch ist.

Um zu sehen, ob die Datei in Gebrauch ist:

Wenn Sie eine gültige Datei-Handle erhalten dann wissen Sie die Datei nicht in Konflikt hat Freigabeberechtigungen mit einem Prozess, der bereits hat diese Datei zu öffnen.

Wenn Sie keinen Zugang Sharing (0 zum dwShareMode Parameter des Aufrufs Create) angeben, dann werden Sie keine Datei-Handeln, wenn andere Verfahren derzeit die Datei in irgendeiner Weise verwenden. GetLastError würde in diesem Fall zurück: ERROR_SHARING_VIOLATION (32)


Um zu sehen, ob es ein Sicherheitsproblem mit Zugriff auf die Datei ist:

Um zu sehen, ob es ein Berechtigungsproblem ist, dass die Datei zugreifen, wird der Aufruf Create auch fehlschlagen, aber mit einem anderen GetLastError. Sie erhalten: ERROR_ACCESS_DENIED (5)

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top