2009-04-02 21 views
10

Próbuję napisać narzędzie, które pozwoli przenosić pliki w systemie Windows, a gdy znajdzie plik w użyciu, ustawi ten plik do przeniesienia po ponownym uruchomieniu komputera.Windows: Zastąp plik w użyciu

Wydaje się, że MoveFileEx (http://msdn.microsoft.com/en-us/library/aa365240(VS.85).aspx) jest właściwa dla tego połączenia, ale nie mogę dowiedzieć się, jaki kod błędu szukam od GetLastError (http://msdn.microsoft.com/en-us/library/ms679360(VS.85).aspx), aby zobaczyć, że plik był w użyciu.

Chcę, aby narzędzie zakończyło się niepowodzeniem, gdy wystąpi rzeczywisty problem z uprawnieniami. Czy mimo to można odróżnić błąd "nie można zapisać" i "błąd" nadpisania?

Ponadto, jeśli mam pliki, które przenoszę w folderze tymczasowym użytkownika, czy zostaną usunięte przed opóźnioną zmianą nazwy?

+0

świetne pytanie +1 ;-) – Raj

Odpowiedz

10

Najpierw należy zadzwonić pod numer CreateFile, aby sprawdzić, czy plik jest w użyciu.

Aby sprawdzić, czy plik jest w użyciu:

Jeśli masz poprawny uchwyt pliku wtedy wiesz, że plik nie ma sprzecznych uprawnienia udostępniania w procesie, który ma już ten plik otwarty.

Jeśli nie określisz dostępu do współużytkowania (0 do parametru dwShareMode wywołania CreateFile), to nie dostaniesz uchwytu pliku, jeśli jakikolwiek inny proces aktualnie używa tego pliku w jakikolwiek sposób. GetLastError w tym przypadku byłoby powrócić: ERROR_SHARING_VIOLATION (32)


Aby sprawdzić, czy istnieje problem bezpieczeństwa z dostępem do pliku:

aby sprawdzić, czy istnieje problem uprawnienia dostępu do tego pliku, wywołanie CreateFile będzie również zawiedzie, ale z innym błędem GetLastError. Otrzymasz: ERROR_ACCESS_DENIED (5)

Powiązane problemy