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

W tym artykule opisano, dlaczego nie można usunąć pliku ani folderu w systemie operacyjnym plików NTFS. Jest to również pomoc przy rozwiązywaniu tego problemu.

Dotyczy:   Windows Server 2012 R2
Oryginalny numer KB:   320081

Uwaga

Wewnętrznie system plików NTFS traktuje foldery jako pliki specjalnego typu. Dlatego plik programu Word w tym artykule wskazuje plik lub folder.

Przyczyna 1. W pliku jest używana ACL

Nie można usunąć pliku, jeśli korzysta on z listy kontroli dostępu (ACL, Access Control List). Aby rozwiązać ten problem, zmień uprawnienia do pliku. Aby zmienić uprawnienia, może być trzeba przejąć prawa własności do plików.

Administratorzy mają niejawną możliwość przejąnia własności dowolnego pliku, nawet jeśli nie zostali jawnie przyznani żadnych uprawnień do tego pliku. Właściciele plików mają niejawną możliwość modyfikowania uprawnień do pliku, nawet jeśli nie mają jawnie udzielonych uprawnień do pliku. Dlatego może być musisz przejąć własność pliku, nadać sobie uprawnienia do usuwania pliku, a następnie usunąć ten plik.

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

Aby around this issue, use another tool (example, a later build of Cacls.exe).

Pozycje kontroli dostępu (ACL) w liście ACL mają określoną preferowaną sekwencję w zależności od typu. Na przykład znajomi aces, które odmawiają dostępu, zazwyczaj przed es-aces, które udzielają dostępu. Jednak nic nie uniemożliwia programowi napisania listy ACL, która zawiera JSW w dowolnej dowolnej kolejności. W niektórych starszych wersjach Windows wystąpiły problemy podczas Windows próbie odczytania tych nie kanonicznych acl. Czasami za pomocą graficznego edytora zabezpieczeń Eksploratora Microsoft Windows nie można poprawnie zmodyfikować tych adresów ACL. Ten problem został rozwiązany w nowszych wersjach Windows. Jeśli występuje ten problem, użyj najnowszej wersji programu Cacls.exe. Nawet jeśli nie możesz wyświetlić ani edytować listy kontroli dostępu w miejscu, możesz napisać nową ACL, aby uzyskać dostęp do pliku.

Przyczyna 2. Używany plik

Nie można usunąć pliku, jeśli jest on używany. Aby rozwiązać ten problem, określ proces z otwartym uchwytem, a następnie zamknij ten proces.

W zależności od sposobu otwarcia pliku usunięcie pliku, który jest w użyciu, może być nie możliwe. Na przykład plik jest otwarty do wyłącznego dostępu zamiast do dostępu udostępnionego. Za pomocą różnych narzędzi możesz określić procesy, które mają otwarte uchwyty do plików, gdy tylko chcesz.

Symptomy tego problemu mogą się różnić. Aby usunąć plik, możesz użyć polecenia Usuń. Jednak plik nie zostanie usunięty, dopóki proces, w przypadku gdy plik jest otwarty, nie zwolni go. Ponadto możesz nie mieć dostępu do okna dialogowego Zabezpieczenia dla pliku, który oczekuje na usunięcie. Aby rozwiązać ten problem, określ proces z otwartym uchwytem, 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 w celu poprawienia wszystkich błędów.

Następujące przyczyny mogą spowodować uszkodzenie systemu plików i umieścić pliki w stanie problemów:

  • Złej awarii na dysku
  • Inny uszkodzony sprzęt
  • Usterki oprogramowania

Typowe operacje mogą się nie powieść 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 rodzaju uszkodzenia program Chkdsk może odzyskać dane pliku lub nie. Jednak funkcja Chkdsk zwraca system plików do wewnętrznie spójnego stanu.

Przyczyna 4. Pliki istnieją w ścieżkach, które są bardziej niż MAX_PATH znaków

W przypadku problemów ze ścieżką pliku nie można otwierać, edytować ani usuwać plików.

Rozwiązanie 1. Uzyskiwanie dostępu do pliku za pomocą automatycznie wygenerowanej nazwy 8.3

Aby rozwiązać ten problem, możesz użyć automatycznie wygenerowanej nazwy 8.3 w celu uzyskania dostępu do pliku. Ta rozdzielczość może być najprostszą rozdzielczością, jeśli ścieżka jest długa, ponieważ nazwy folderów są zbyt długie. Jeśli ścieżka 8.3 jest także zbyt długa lub jeśli na woluminie wyłączono nazwy 8,3, przejdź do tematu Rozdzielczość 2. Aby uzyskać więcej informacji na temat wyłączania nazw plików 8.3 w woluminach plików NTFS, zobacz Jak wyłączyć tworzenie nazw 8.3 na partycjach ntfs.

Rozwiązanie 2. Zmienianie nazwy lub przenoszenie folderu głębokości

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

Rozwiązanie 3. Mapowanie dysku na folder w strukturze ścieżki

Zamapuj dysk na folder wewnątrz struktury ścieżki docelowego pliku lub folderu. Ta metoda pozwala skrócić ścieżkę wirtualną.

Załóżmy na przykład, że ścieżka ma następującą strukturę:

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

Na tej ścieżce całkowita liczba znaków wynosi ponad 255 znaków. Aby długość tej ścieżki była krótka do 73 znaków, zamapuj dysk na podfolderName4.

Rozwiązanie 4. Używanie udziału sieciowego o najgłębszej głębokości co folder

Jeśli rozwiązania 1, 2 i 3 są dogodne lub nie rozwiązały problemu, utwórz udział sieciowy tak głębokości w drzewie folderów, jak to tylko można. Następnie zmień nazwy folderów, uzyskujejąc dostęp do udostępniania.

Rozdzielczość 5. Użycie narzędzia, które może przechodzić między ścieżkami głębokości

Wiele Windows oczekuje, że maksymalna długość ścieżki będzie mniejsza niż 255 znaków. W tych programach jest przydzielana tylko ilość miejsca 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 utworzysz udział w swojej strukturze folderów, która jest już dosyć głębokości, a następnie utworzysz pod tym punktem dogłębną strukturę przy użyciu udziału. Niektóre narzędzia operują lokalnie na drzewie folderów i nie mogą przechodzić przez całe drzewo od katalogu głównego. Te narzędzia mogą być potrzebne w sposób specjalny, aby przechodzić między tymi narzędziami. W dokumentacji interfejsu API CreateFile opisano metodę przechodzenia przez całe drzewo w takiej sytuacji.

Zazwyczaj plikami można zarządzać przy użyciu oprogramowania, które je tworzy. Jeśli masz program, który MAX_PATHumożliwia tworzenie plików o głębiej niż , zazwyczaj za pomocą tego samego programu możesz usuwać pliki lub nimi zarządzać. Zazwyczaj możesz usunąć pliki, które są tworzone w udziałach, używając tego samego udziału.

Przyczyna 5. Nazwa pliku zawiera nazwę zastrzeżoną w przestrzeni nazw Win32

Jeśli nazwa pliku zawiera nazwę zastrzeżoną w przestrzeni nazw win32, taką jak lpt1, nie można usunąć pliku. Aby rozwiązać ten problem, zmień nazwę pliku w programie innym niż Win32. Możesz użyć narzędzia POSIX lub dowolnego innego narzędzia, które używa odpowiedniej składni wewnętrznej do użycia pliku.

Ponadto można użyć niektórych wbudowanych poleceń, aby pominąć typowe testy nazw zastrzeżonych systemu Win32 w przypadku użycia określonej składni do określenia ścieżki pliku.

Jeśli otworzysz uchwyt do pliku przy użyciu typowego mechanizmu CreateFile w 32-winie, pewne nazwy plików są zarezerwowane dla starych urządzeń z systemem DOS. W celu zapewnienia zgodności z poprzednimi wersjami te nazwy plików są niedozwolone i nie można ich tworzyć przy użyciu typowych połączeń z plikami Win32. Ten problem nie jest ograniczeniem systemu plików NTFS.

Za pomocą programu Win32 można pominąć typowe testy nazw wykonywane podczas tworzenia lub usunięcia pliku przy użyciu tej samej techniki, która jest stosowana do przechodzenia między folderami bardziej niż .MAX_PATH Ponadto niektóre narzędzia POSIX nie podlegają tym testom 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ę na końcowej lub kropce końcowej albo 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. Składnię można stosować w "\\?\" przypadku niektórych narzędzi 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 typowej składni systemu Win32 używasz do otwierania pliku, który zawiera końcowe spacje lub kropki końcowe w nazwie, spacje końcowe lub kropki są usuwania przed otwarciem rzeczywistego pliku. Na przykład masz dwa pliki w tym samym folderze AFile.txt AFile.txt o nazwie i zwróć uwagę na spację po nazwie pliku. Jeśli spróbujesz otworzyć drugi plik przy użyciu standardowych połączeń z win32, zamiast tego otwierasz pierwszy plik. Podobnie, jeśli nazwa pliku to znak spacji i próbujesz go otworzyć za pomocą standardowych połączeń z win32, zamiast tego otwierasz 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 dla różnych plików. W takim przypadku możesz sądzić, że masz uprawnienia do pliku, który w rzeczywistości ma restrykcyjną ACL.

Kombinacje przyczyn

Czasami mogą wystąpić połączenia tych przyczyn. Procedura ta może ułatwić usunięcie pliku. Jeśli na przykład zalogujesz się jako administrator komputera, możesz doświadczyć kombinacji z przyczyn : 1 (brak uprawnień do usuwania pliku) i Przyczyna 5 (nazwa pliku zawiera znak trailingu, który powoduje przekierowywanie dostępu do innego pliku lub do innego pliku), i nie można usunąć pliku. Jeśli spróbujesz rozwiązać problem Przyczyny 1 , przejmąc własność pliku i dodając uprawnienia, nadal możesz nie być w stanie usunąć 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 /onlyfile razem z przełącznikiem (to narzędzie znajduje się w zestawie Resource Kit), aby zmienić własność i uprawnienia do pliku, który w inny sposób 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óre zostało zawinięte w celu najczytności.

Ten przykładowy wiersz polecenia C:\<path_to_problem_file> modyfikuje plik zawierający miejsce końcowe, dzięki czemu właścicielem pliku jest domena\konto administratora, a to konto ma pełną kontrolę nad plikiem. Teraz możesz usunąć ten plik przy użyciu polecenia aplikacji Del o tej samej składni "\\?\" .