2012-05-16 11 views
6

Próbuję utworzyć niezawodną funkcję rekursywnego folderu deleterów.FindFirstFile zwraca odmowę dostępu

Z normalnymi katalogami działa całkiem dobrze.

problem pojawia się podczas tworzenia się "podstawowych" direcory jak:

C: \ test \ x \ x \ x \ x \ x \ x \ x \ x \ x \ x \ x \ x \ x \ x \ x \ x \ x \ x \ x \ x \ ... \ x \ x \ x

długość ta wynosi około 25000 (poniżej granicy MSDN: 32,767). Zasadniczo stworzyłem ten katalog rekurencyjnie, dopóki nie zadziała funkcja CreatDirectory.

Teraz Najdziwniejsze jest to, że moja funkcja jest w stanie usunąć 2 katalogi wtedy FindFirstFile nie powiedzie się z 0x5:

\\?\C:\test\x\ ... \x\x\x\*.* < no error 
\\?\C:\test\x\ ... \x\x\*.*  < no error 
\\?\C:\test\x\ ... \x\*.*  < access denied 

(mogę ponownie uruchomić go, aplikacja jest powoli żuje się folder, 2 na 2, prawdopodobnie dopóki długość ścieżki nie będzie dość mała)

Używam FindFirstFile, aby sprawdzić, czy folder jest pusty.

  • Czy istnieje jakieś ograniczenie, które jest mniej udokumentowane?
  • Plik FindFirstFile po prostu nie działa? (buggy?)
  • Czy brakuje mi jakiegoś uprawnienia NTFS?
  • Coś innego ...

EDIT: UWAGA: Jeśli mogę uruchomić programu krok po kroku, powoli ... to nic się nie powiedzie.

+1

plz pokaż nam swój pozbawiony kodu kod –

+0

Kod jest ogromny i nie wydaje mi się użyteczny do publikowania. – lerosQ

+0

Zrobiłem to dokładnie kilka razy i nigdy nie miałem problemu; problem jest najprawdopodobniej w twoim kodzie. Przynajmniej spróbuj zredukować go do minimalnego przykładu, aby zobaczyć, czy to coś oczywistego. – Luke

Odpowiedz

7

Prawdopodobnie doświadczasz czegoś takiego jak skaner antywirusowy, narzędzie indeksujące lub rozwiązanie do ciągłej kopii zapasowej, które trzyma uchwyt do katalogu. Jeśli usługa indeksowania jest skonfigurowana do indeksowania tego folderu, na przykład.

Próba usunięcia folderu lub pliku otwartego poza flagą FILE_SHARE_DELETE spowoduje ACCESS_DENIED.

Aby to potwierdzić, użyj Monitora procesu, aby zobaczyć, czy otwiera się i zamyka na wszystkim, co pasuje do Twojej ścieżki.

(Oczywiście również potwierdzić, że zadzwoniłeś FindClose).

+0

Usługa indeksowania wyszukuje najgłębszy folder ... zawsze. – lerosQ

+0

Mój problem polegał na tym, że uprawnienia dostępu były nieprawidłowe w pliku, do którego próbowałem uzyskać dostęp. Wygląda na to, że jest to rozwiązanie "duh", ale sprawdziłbym właściwości pliku-> security i upewnił się, że właściwa grupa dostępu może uzyskać dostęp do plików, ponieważ jest to najbardziej oczywisty przypadek "ACCESS_DENIED", ponieważ ... nie można uzyskać dostępu do plików pliki = P – mgrandi

Powiązane problemy