Udostępnij za pośrednictwem


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

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

Oryginalny numer KB: 320081

Uwaga 16.

Wewnętrznie 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 kontroli dostępu (ACL). Aby rozwiązać ten problem, zmień uprawnienia w pliku. Może być konieczne przejęcie na własność plików w celu zmiany uprawnień.

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

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

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

Wpisy kontroli dostępu (ACL) w listach ACL mają określoną preferowaną sekwencję w zależności od ich typu. Na przykład elementy ACL, które odmawiają dostępu, są zwykle wykonywane przed elementy ACL, które udzielają dostępu. Jednak nic nie uniemożliwia programowi pisania listy ACL, która ma listy KONTROLI dostępu 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 zmodyfikować tych list ACL przy użyciu graficznego edytora zabezpieczeń Eksploratora Microsoft Windows. Ten problem został poprawiony 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 otwarte dojście, a następnie zamknij ten proces.

W zależności od sposobu otwierania pliku może nie być możliwe usunięcie używanego pliku. Na przykład plik jest otwarty w celu uzyskania dostępu wyłącznego 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 zawsze, gdy chcesz.

Objawy tego problemu mogą się różnić. Aby usunąć plik, możesz użyć polecenia Usuń. Jednak plik nie jest usuwany, dopóki proces, który ma otwarty plik, zwalnia plik. Ponadto może nie być możliwe uzyskanie dostępu do okna dialogowego Zabezpieczenia dla pliku, który oczekuje na usunięcie. Aby rozwiązać ten problem, określ proces, który ma otwarte 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 naprawić 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 wadliwy sprzęt
  • Usterki oprogramowania

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

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

Nie można otworzyć, edytować ani usunąć pliku, jeśli występują problemy ze ścieżką pliku.

Rozwiązanie 1. Użyj automatycznie wygenerowanej nazwy 8.3, aby uzyskać dostęp do pliku

Aby rozwiązać ten problem, możesz użyć automatycznie wygenerowanej 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 jest również za długa lub jeśli nazwy 8.3 zostały wyłączone na woluminie, przejdź do pozycji Rozdzielczość 2. Aby uzyskać więcej informacji na temat wyłączania nazw plików 8.3 na woluminach NTFS, zobacz How to disable the 8.3 name creation on NTFS partitions (Jak wyłączyć tworzenie nazw 8.3 w partycjach NTFS).

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

Zmień nazwę folderu, aby pliki docelowe, które są głębsze niż MAX_PATH nie istnieją. Jeśli to zrobisz, zacznij od folderu głównego lub innego wygodnego miejsca. Następnie zmień nazwy folderów, 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 sekcji Rozwiązanie 4.

Rozwiązanie 3: Mapuj dysk do folderu w strukturze ścieżki

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

Załóżmy na przykład, że masz ścieżkę, która ma strukturę w następujący sposób:

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

W tej ścieżce całkowita 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 znajduje się tak głęboko w drzewie folderów, jak to możliwe. Następnie zmień nazwę folderów, korzystając z udziału.

Rozdzielczość 5. Korzystanie z narzędzia, które może przechodzić przez głębokie ścieżki

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 przechowywać znacznie dłuższe ścieżki.

Ten problem może wystąpić, jeśli utworzysz udział w pewnym momencie w strukturze folderów, która jest już dość głęboka, 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 rozpoczynające się od katalogu głównego. Może być konieczne użycie tych narzędzi w specjalny sposób, aby umożliwić przechodzenie przez udział. W dokumentacji interfejsu API CreateFile opisano metodę przechodzenia przez całe drzewo w tej sytuacji.

Zazwyczaj można zarządzać plikami przy użyciu oprogramowania, które je tworzy. Jeśli masz program, który może tworzyć pliki, które są głębsze niż MAX_PATH, zazwyczaj można 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, takiej jak lpt1, nie można usunąć pliku. Aby rozwiązać ten problem, użyj programu innego 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 testy nazw zarezerwowanych Win32, jeśli używasz określonej składni do określenia ścieżki pliku.

Jeśli otworzysz dojście do pliku przy użyciu typowego mechanizmu Win32 CreateFile, niektóre nazwy plików są zarezerwowane dla urządzeń z systemem DOS w starym stylu. W celu zapewnienia 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.

Można użyć programu Win32, aby pominąć typowe kontrole nazw, które są wykonywane po utworzeniu lub usunięciu pliku przy użyciu tej samej techniki, która służy do przechodzenia do folderów głębiej niż MAX_PATH. Ponadto niektóre narzędzia POSIX nie podlegają kontroli 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 zawiera spację końcową lub kropkę końcową albo nazwę pliku składa się tylko z miejsca. Aby rozwiązać ten problem, użyj narzędzia, które używa odpowiedniej składni wewnętrznej do usunięcia pliku. Składnię "\\?\" można używać z niektórymi narzędziami do obsługi tych plików. 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 do otwierania pliku, który zawiera końcowe spacje lub końcowe kropki w 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 spację po nazwie pliku. Jeśli spróbujesz otworzyć drugi plik przy użyciu standardowych wywołań Win32, otwórz pierwszy plik. Podobnie, jeśli masz plik, którego nazwa jest tylko znakiem spacji i spróbujesz go otworzyć przy użyciu standardowych wywołań Win32, otwórz folder nadrzędny pliku. W takiej sytuacji, jeśli spróbujesz zmienić ustawienia zabezpieczeń na tych plikach, być może nie będzie można tego zrobić lub nieoczekiwanie zmienić ustawienia w różnych plikach. Jeśli takie zachowanie występuje, 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. Procedura usuwania pliku może być bardziej skomplikowana. Jeśli na przykład logujesz się jako administrator komputera, może wystąpić kombinacja przyczyny 1 (nie masz uprawnień do usunięcia pliku) i Przyczyna 5 (nazwa pliku zawiera końcowy znak, 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że nie być możliwe usunięcie 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 przełącznikiem /onlyfile (to narzędzie jest dołączone do zestawu Resource Kit), aby zmienić własność i uprawnienia w pliku, który jest w przeciwnym razie niedostępny. Oto przykład:

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

Uwaga 16.

To polecenie jest pojedynczym wierszem polecenia, który został opakowany pod kątem czytelności.

Ten przykładowy wiersz polecenia modyfikuje C:\<path_to_problem_file> plik zawierający spację końcową, tak aby konto domeny\administrator było właścicielem pliku, a to konto ma pełną kontrolę nad plikiem. Teraz możesz usunąć ten plik przy użyciu polecenia Del z tą samą "\\?\" składnią.