Nie można usunąć pliku lub folderu na woluminie systemu plików NTFS

W tym artykule opisano, dlaczego nie można usunąć pliku lub folderu na woluminie systemu plików NTFS. Zapewnia również pomoc w rozwiązaniu tego problemu.

Dotyczy: Windows Server 2012 R2
Oryginalny numer KB: 320081

Uwaga

Wewnętrznie system PLIKÓW NTFS traktuje foldery jako specjalny typ pliku. W związku z tym plik wyrazów w tym artykule wskazuje plik lub folder.

Przyczyna 1. Plik używa listy ACL

Nie można usunąć pliku, jeśli plik używa listy Access Control (ACL). Aby rozwiązać ten problem, zmień uprawnienia do pliku. Aby zmienić uprawnienia, może być konieczne przejęcie na własność plików.

Administratorzy mają niejawną możliwość przejęcia na własność dowolnego pliku, nawet jeśli nie udzielono im jawnie żadnych uprawnień do pliku. Właściciele plików mają niejawną możliwość modyfikowania uprawnień do pliku, nawet jeśli nie otrzymują jawnie żadnych uprawnień do pliku. Dlatego może być konieczne przejęcie na własność pliku, nadaj sobie uprawnienia do usunięcia pliku, a następnie usunięcia pliku.

Nie można użyć niektórych narzędzi zabezpieczeń do wyświetlania lub modyfikowania uprawnień, ponieważ plik ma nie kanoniczną listę ACL

Aby obejść ten problem, użyj innego narzędzia (na przykład późniejszej kompilacji Cacls.exe).

Wpisy Access Control (ACL) w liście ACL mają pewną preferowaną sekwencję w zależności od typu. Na przykład ACE, które odmawiają dostępu, zwykle pojawiają się przed ACE, które udzielają dostępu. Jednak nic nie uniemożliwia programowi pisania listy ACL, która ma ACL w dowolnej sekwencji. W niektórych wcześniejszych wersjach systemu Windows wystąpiły problemy, gdy system Windows próbował odczytać te nie kanoniczne listy ACL. Czasami nie można poprawnie modyfikować tych list ACL przy użyciu graficznego edytora zabezpieczeń Eksploratora Microsoft Windows Explorer. Ten problem został rozwiązany w nowszych wersjach systemu Windows. Jeśli wystąpi ten problem, użyj najnowszej wersji Cacls.exe. Nawet jeśli nie możesz wyświetlić ani edytować listy ACL, możesz napisać nową listę ACL, aby uzyskać dostęp do pliku.

Przyczyna 2. Plik jest używany

Nie można usunąć pliku, jeśli plik jest używany. Aby rozwiązać ten problem, określ proces, który ma otwarty dojście, a następnie zamknij ten proces.

W zależności od sposobu otwarcia pliku może nie być możliwe usunięcie używanego pliku. Na przykład plik jest otwarty w celu uzyskania wyłącznego dostępu zamiast dostępu współdzielonego. Za pomocą różnych narzędzi można określić procesy, które mają otwarte dojścia do plików, kiedy tylko zechcesz.

Objawy tego problemu mogą się różnić. Aby usunąć plik, możesz użyć polecenia Usuń. Jednak plik nie zostanie usunięty, dopóki proces z otwartym plikiem nie wyda pliku. Ponadto może nie być możliwe uzyskanie dostępu do okna dialogowego Zabezpieczenia dla pliku oczekującego na usunięcie. Aby rozwiązać ten problem, określ proces, który ma otwarty dojście, a następnie zamknij ten proces.

Przyczyna 3. Uszkodzenie systemu plików uniemożliwia dostęp do pliku

Nie można usunąć pliku, jeśli system plików jest uszkodzony. Aby rozwiązać ten problem, uruchom narzędzie Chkdsk na woluminie dysku, aby usunąć wszelkie błędy.

Następujące przyczyny mogą uszkodzić system plików i umieścić pliki w problematycznym stanie:

  • Nieprawidłowe sektory na dysku
  • Inny uszkodzony sprzęt
  • Błędy oprogramowania

Typowe operacje mogą kończyć się niepowodzeniem na różne sposoby. Gdy system plików wykryje uszkodzenie, rejestruje zdarzenie w dzienniku zdarzeń i zazwyczaj otrzymujesz komunikat z monitem o uruchomienie programu Chkdsk. W zależności od charakteru uszkodzenia program Chkdsk może odzyskać dane pliku lub nie może go odzyskać. Jednak program Chkdsk zwraca system plików do stanu spójnego wewnętrznie.

Przyczyna 4. Pliki istnieją w ścieżkach, które są głębsze niż znaki MAX_PATH

Nie można otworzyć, edytować ani usunąć pliku w przypadku problemów ze ścieżką pliku.

Rozwiązanie 1. Uzyskiwanie dostępu do pliku przy użyciu autogenerowanej nazwy 8.3

Aby rozwiązać ten problem, możesz użyć autogenerowanej nazwy 8.3, aby uzyskać dostęp do pliku. Ta rozdzielczość może być najprostszym rozwiązaniem, jeśli ścieżka jest głęboka, ponieważ nazwy folderów są zbyt długie. Jeśli ścieżka 8.3 również jest zbyt długa lub jeśli nazwy 8.3 zostały wyłączone na woluminie, przejdź do rozwiązania 2. Aby uzyskać więcej informacji na temat wyłączania nazw plików 8.3 na woluminach NTFS, zobacz Jak wyłączyć tworzenie nazw 8.3 na partycjach NTFS.

Rozwiązanie 2. Zmienianie nazwy lub przenoszenie folderu głębokiego

Zmień nazwę folderu tak, aby pliki docelowe, które są głębsze niż te, MAX_PATH które już nie istnieją. Jeśli to zrobisz, zacznij od folderu głównego lub innego wygodnego miejsca. Następnie zmień nazwę folderów tak, aby miały krótsze nazwy. Jeśli ten krok nie rozwiąże tego problemu, na przykład jeśli plik zawiera więcej niż 128 folderów, przejdź do rozwiązania 4.

Rozdzielczość 3. Mapowanie dysku na folder w strukturze ścieżki

Zamapuj dysk na folder wewnątrz struktury ścieżki docelowego pliku lub folderu. Ta metoda skraca ścieżkę wirtualną.

Załóżmy na przykład, że masz ścieżkę o strukturze w następujący sposób:

\\ServerName\SubfolderName1\SubfolderName2\SubfolderName3\SubfolderName4\...

W tej ścieżce łączna liczba znaków wynosi ponad 255 znaków. Aby skrócić długość tej ścieżki do 73 znaków, zamapuj dysk na podfolderName4.

Rozwiązanie 4. Użyj udziału sieciowego, który jest tak głęboki, jak folder

Jeśli rozwiązania 1, 2 i 3 nie są wygodne lub nie rozwiążą problemu, utwórz udział sieciowy, który jest tak głęboko w drzewie folderów, jak to tylko możliwe. Następnie zmień nazwę folderów, uzyskując dostęp do udziału.

Rozwiązanie 5. Używanie narzędzia, które może przechodzić przez ścieżki głębokie

Wiele programów systemu Windows oczekuje, że maksymalna długość ścieżki będzie krótsza niż 255 znaków. Te programy przydzielają tylko wystarczającą ilość magazynu wewnętrznego do obsługi tych typowych ścieżek. System plików NTFS nie ma tego limitu i może zawierać znacznie dłuższe ścieżki.

Ten problem może wystąpić, jeśli w pewnym momencie w strukturze folderów utworzysz udział, który jest już dość głęboki, a następnie utworzysz głęboką strukturę poniżej tego punktu przy użyciu udziału. Niektóre narzędzia, które działają lokalnie w drzewie folderów, mogą nie być w stanie przejść przez całe drzewo, począwszy od katalogu głównego. Może być konieczne użycie tych narzędzi w specjalny sposób, aby umożliwić im przechodzenie przez udział. W dokumentacji interfejsu API CreateFile opisano metodę przechodzenia przez całe drzewo w tej sytuacji.

Zazwyczaj pliki można zarządzać przy użyciu oprogramowania, które je tworzy. Jeśli masz program, który może tworzyć pliki bardziej szczegółowe niż MAX_PATH, zazwyczaj możesz użyć tego samego programu do usunięcia plików lub zarządzania nimi. Zazwyczaj można usuwać pliki utworzone w udziale przy użyciu tego samego udziału.

Przyczyna 5. Nazwa pliku zawiera nazwę zarezerwowaną w przestrzeni nazw Win32

Jeśli nazwa pliku zawiera nazwę zarezerwowaną w przestrzeni nazw Win32, na przykład lpt1, nie można usunąć pliku. Aby rozwiązać ten problem, użyj programu innej niż Win32, aby zmienić nazwę pliku. Możesz użyć narzędzia POSIX lub dowolnego innego narzędzia, które używa odpowiedniej składni wewnętrznej do korzystania z pliku.

Ponadto możesz użyć niektórych wbudowanych poleceń, aby pominąć typowe kontrole nazw zarezerwowanych Win32, jeśli do określenia ścieżki pliku jest używana określona składnia.

Jeśli otworzysz dojście do pliku przy użyciu typowego mechanizmu Win32 CreateFile, niektóre nazwy plików są zarezerwowane dla urządzeń DOS w starym stylu. W przypadku zgodności z poprzednimi wersjami te nazwy plików nie są dozwolone i nie można ich utworzyć przy użyciu typowych wywołań plików Win32. Ten problem nie jest ograniczeniem systemu plików NTFS.

Program Win32 umożliwia obejście typowych testów nazw wykonywanych podczas tworzenia lub usuwania pliku przy użyciu tej samej techniki, której używasz do przechodzenia przez foldery głębiej niż MAX_PATH. Ponadto niektóre narzędzia POSIX nie podlegają tym kontrolom nazw.

Przyczyna 6. Nazwa pliku zawiera nieprawidłową nazwę w przestrzeni nazw Win32

Nie można usunąć pliku, jeśli nazwa pliku zawiera nieprawidłową nazwę. Na przykład nazwa pliku ma spację końcową lub końcowy okres lub nazwa pliku składa się tylko ze spacji. Aby rozwiązać ten problem, użyj narzędzia, które używa odpowiedniej składni wewnętrznej do usunięcia pliku. Do obsługi tych plików można użyć "\\?\" składni z niektórymi narzędziami. Oto przykład:

del "\\?\c:\<path_to_file_that contains a trailing space.txt>"

Przyczyna tego problemu jest podobna do przyczyny 4. Jeśli używasz typowej składni Win32, aby otworzyć plik, który ma końcowe spacje lub końcowe kropki w swojej nazwie, końcowe spacje lub kropki zostaną usunięte przed otwarciem rzeczywistego pliku. Na przykład masz dwa pliki w tym samym folderze o nazwie AFile.txt i AFile.txt , zanotuj miejsce po nazwie pliku. Jeśli spróbujesz otworzyć drugi plik przy użyciu standardowych wywołań Win32, zamiast tego otworzysz pierwszy plik. Podobnie, jeśli masz plik, którego nazwa jest tylko znakiem spacji i próbujesz go otworzyć przy użyciu standardowych wywołań Win32, zamiast tego otworzysz folder nadrzędny pliku. W takiej sytuacji, jeśli spróbujesz zmienić ustawienia zabezpieczeń dla tych plików, możesz nie być w stanie tego zrobić lub nieoczekiwanie zmienić ustawienia w różnych plikach. Jeśli takie zachowanie wystąpi, możesz pomyśleć, że masz uprawnienia do pliku, który faktycznie ma restrykcyjną listę ACL.

Kombinacje przyczyn

Czasami mogą wystąpić kombinacje tych przyczyn. Może to sprawić, że procedura usuwania pliku będzie bardziej złożona. Jeśli na przykład zalogujesz się jako administrator komputera, może wystąpić kombinacja przyczyny 1 (nie masz uprawnień do usunięcia pliku) i Przyczyna 5 (nazwa pliku zawiera znak końcowy, który powoduje przekierowanie dostępu do pliku do innego lub nieistniejącego pliku) i nie można usunąć pliku. Jeśli spróbujesz rozwiązać przyczynę 1 , przejmując własność pliku i dodając uprawnienia, nadal możesz nie mieć możliwości usunięcia pliku, ponieważ edytor listy ACL w interfejsie użytkownika nie może uzyskać dostępu do odpowiedniego pliku z powodu przyczyny 6.

W takiej sytuacji można użyć narzędzia Subinacl z /onlyfile przełącznikiem (to narzędzie jest zawarte w zestawie zasobów), aby zmienić własność i uprawnienia do pliku, który w przeciwnym razie jest niedostępny. Oto przykład:

subinacl /onlyfile "\\?\c:\<path_to_problem_file>" /setowner= domain\administrator /grant= domain\administrator=F

Uwaga

To polecenie jest pojedynczym wierszem polecenia, który został opakowany w celu zapewnienia czytelności.

Ten przykładowy wiersz polecenia modyfikuje C:\<path_to_problem_file> plik, który zawiera końcowe miejsce, tak aby konto domeny\administratora było właścicielem pliku, a to konto ma pełną kontrolę nad plikiem. Teraz możesz usunąć ten plik za pomocą polecenia Del z tą samą "\\?\" składnią.