1. 程式人生 > >無法刪除 NTFS 盤上的文件或文件夾(對Windows文件的各種情況有比較詳細的描述)

無法刪除 NTFS 盤上的文件或文件夾(對Windows文件的各種情況有比較詳細的描述)

將在 binding 新的 資源管理器 操作權限 損壞 windows 導致 port

簡介

本文介紹您可能無法刪除 NTFS 文件系統卷上的文件或文件夾的原因,以及如何分析造成此問題的不同原因從而解決此問題。

更多信息

註意:在內部,NTFS 將文件夾作為特殊類型的文件進行處理。因此,本文中的“文件”一詞可能指文件,也可能指文件夾。

原因 1:文件使用了 ACL

如果某個文件使用了訪問控制列表 (ACL),您可能無法刪除該文件。要解決此問題,請更改該文件上的權限。您可能需要擁有這些文件的所有權才能更改權限。

管理員具有取得任何文件所有權的隱含能力,即使未明確向他們授予針對此文件的任何權限也是如此。文件所有者具有修改文件權限的隱含能力,即使未明確向他們授予針對此文件的任何權限也是如此。因此,您可能需要取得對某個文件的所有權,賦予自己刪除文件的權限,然後才能刪除文件。

由於文件使用了不規範的 ACL 而無法使用某些安全工具來顯示或修改權限

要變通解決此問題,請使用另一種工具(例如,Cacls.exe 的更新版本)。

根據所屬類型,ACL 中的訪問控制項 (ACE) 有特定的優先順序。例如,拒絕訪問的 ACE 一般位於授予訪問權的 ACE 之前。不過,我們無法防止某個程序編寫按任意順序安排 ACE 的 ACL。在 Windows 的一些早期版本中,當 Microsoft Windows 嘗試讀取這些“不規範”的 ACL 時會出現問題。有時,無法通過使用 Microsoft Windows 資源管理器圖形化安全編輯器正確修改這些 ACL。此問題在 Windows 的更高版本中得到了糾正。如果您遇到了此問題,請使用最新版本的 Cacls.exe。即使無法顯示或編輯一個現有的 ACL,也可以編寫一個允許您訪問該文件的新 ACL。

原因 2:該文件正在使用

如果文件正在使用中,則可能無法將其刪除。要解決此問題,請確定具有打開句柄的進程,然後關閉此進程。

根據文件的打開方式(例如,以獨占訪問而不是共享訪問方式打開),您可能無法刪除使用中的文件。無論何時,您都可以使用多種工具來幫助確定擁有文件的打開句柄的進程。要進一步了解可幫助確定擁有文件打開句柄的進程的工具,請單擊下面的文章編號,以查看 Microsoft 知識庫中相應的文章:

242131 如何顯示具有已打開文件的進程的列表

172710 如何使用 Windows NT 4.0 資源工具包中的 OH 工具

此問題的癥狀可能多種多樣。您可以使用“刪除”命令來刪除一個文件,但在打開該文件的進程釋放該文件之前,該文件實際上並未刪除。另外,您可能無法訪問正在刪除中的文件的“安全”對話框。要解決此問題,請確定具有打開句柄的進程,然後關閉此進程。

原因 3:文件系統損壞使您無法訪問此文件

如果文件系統被破壞,則可能無法刪除此文件。要解決此問題,請在磁盤卷上運行 Chkdsk 實用工具以糾正任何存在的錯誤。

磁盤上的壞區、其他硬件故障或者軟件錯誤都可能會損壞文件系統,使文件出現問題。典型操作失敗的方式可能各不相同。當文件系統檢測到有損壞時,它將在事件日誌中記錄一個事件,而且您通常會收到一條提示您運行 Chkdsk 的消息。根據損壞的性質,Chkdsk 可能能夠也可能無法恢復文件數據;不過,Chkdsk 可以使文件系統返回到一種在內部一致的狀態。 有關如何使用 Chkdsk 實用工具的其他信息,請單擊下面的文章編號,以查看 Microsoft 知識庫中相應的文章:
176646 錯誤消息:The file or directory is corrupt...(文件或目錄已損壞...)

187941 對 CHKDSK 和新的 /C 和 /I 開關的解釋

原因 4:文件位於比 MAX_PATH 字符更深的路徑中

如果文件路徑存在問題,則可能無法打開、編輯或刪除該文件。

解決方案 1:使用自動生成的 8.3 名稱訪問該文件

要解決此問題,您可能需要使用自動生成的 8.3 名稱訪問該文件。如果路徑深的原因是文件夾名稱太長,則這可能是最簡便的解決方案。如果 8.3 路徑也太長,或者 8.3 名稱已在該卷上被禁用,則請轉到解決方案 2。 有關在 NTFS 卷上禁用 8.3 文件名的其他信息,請單擊下面的文章編號,以查看 Microsoft 知識庫中相應的文章: 121007 如何在 NTFS 分區上禁止創建 8.3 名稱

解決方案 2:重命名或移動路徑深的文件夾

重命名文件夾,以使目標文件的路徑深度不超過 MAX_PATH。如要這樣做,請從根文件夾(或任何其他方便的位置)開始,然後重命名文件夾,以縮短它們的名稱。如果此步驟不能解決此問題(例如,如果文件的深度超過 128 個文件夾),請轉到解決方案 4。

解決方案 3:將驅動器映射到路徑結構中的一個文件夾

將驅動器映射到目錄文件或文件夾的路徑結構中的一個文件夾。該方法可縮短實際上的路徑。

例如,假定您有一個類似如下結構的路徑:
\\ServerName\SubfolderName1\SubfolderName2\SubfolderName3\SubfolderName4\... 在該路徑中,總字符數超過 255 個。要將該路徑的長度縮短為 73 個字符,請將驅動器映射到 SubfolderName4。

解決方案 4:使用與文件夾具有相同深度的網絡共享

如果解決方案 1、2 或 3 不太方便,或者不能解決問題,請創建一個網絡共享,使其位於文件夾樹中盡可能深的位置,然後通過訪問此共享來重命名文件夾。

解決方案 5:使用能夠遍歷深路徑的工具

許多 Windows 程序都預期最大路徑長度少於 255 個字符。因此,這些程序僅分配足夠的內部存儲來處理這些典型路徑。NTFS 沒有此限制,它可以處理比這長得多的路徑。

如果您在文件夾結構中一個已經相當深的位置創建一個共享,然後通過使用此共享在此位置之下創建一個深層結構,則可能會遇到此問題。某些在文件夾樹上執行本地操作的工具可能無法遍歷從根文件夾開始的整個文件夾樹。您可能需要以特殊方式使用這些工具,以便它們能夠遍歷該共享位置。(CreateFile API 文檔介紹了一種在此情形下遍歷整個文件夾樹的方法。)

一般情況下,您可以通過使用創建文件的軟件來管理這些文件。如果有一個程序,它可以創建超過 MAX_PATH 的文件,則一般情況下您可以使用此同一程序來刪除或管理這些文件。您通常可以通過使用共享來刪除在此同一共享上創建的文件。

原因 5:文件名中包括 Win32 命名空間中的一個保留名稱

如果文件名中包括 Win32 命名空間中的一個保留名稱(例如“lpt1”),則可能無法刪除此文件。要解決此問題,請使用非 Win32 程序重命名該文件。您可以使用 POSIX 工具或其他任何使用適當內部語法的工具來使用此文件。

此外,如果您使用特定的語法指定文件的路徑,則可能能夠使用一些內置的命令繞過典型的 Win32 保留名稱檢查。例如,如果在 Windows XP 中使用 Del 命令,則在使用以下特定的語法指定該文件的完整路徑的情況下,可以刪除名為“lpt1”的文件:
del \\?\c:\path_to_file\lpt1 有關在 Windows NT 和 Windows 2000 下刪除具有保留名稱的文件的更多信息,請單擊下面的文章編號,以查看 Microsoft 知識庫中相應的文章:

120716 如何在 Windows 中刪除具有保留名稱的文件

有關在 Windows XP 下刪除具有保留名稱的文件的更多信息,請單擊下面的文章編號,以查看 Microsoft 知識庫中相應的文章:

315226 如何在 Windows XP 中刪除具有保留名稱的文件

如果使用典型的 Win32 CreateFile 機制打開到某個文件的句柄,則某些文件名稱是為舊式 DOS 設備保留的。為了向後兼容,不允許使用這些文件名,也不能使用典型的 Win32 文件調用來創建它們。不過,此問題並不是 NTFS 的一種限制。

通過使用遍歷超過 MAX_PATH 的文件夾時所用的那種技巧,您或許能夠使用 Win32 程序繞過在創建(或刪除)文件時執行的典型名稱檢查。另外,有些 POSIX 工具不接受這些名稱檢查。

原因 6:文件名包括 Win32 命名空間中的無效名稱

如果文件名中包括無效名稱,您可能無法刪除該文件(例如,文件名有一個尾隨空格,或一個尾隨句點,或者文件名僅由一個空格組成)。要解決此問題,請用一種使用適當內部語法的工具刪除此文件。您可以將“\\?\”語法用於某些工具,以便對這些文件進行操作,例如: del "\\?\c:\path_to_file_that contains a trailing space.txt " 導致此問題的原因與原因 4 類似。然而,如果使用典型的 Win32 語法打開名稱中有尾隨空格或尾隨句點的文件,則尾隨空格或句點在打開實際文件之前會被去掉。因此,如果在同一個文件夾中有兩個分別名為“AFile.txt”和“AFile.txt ”的文件(註意文件名後面的空格),如果您嘗試使用標準 Win32 調用打開第二個文件,實際上會打開第一個文件。同樣,如果文件的名稱僅是“ ”(一個空格字符),當嘗試使用標準 Win32 調用打開它時,實際上會打開該文件的父文件夾。在此情況下,如果您嘗試更改這些文件上的安全設置,要麽無法更改,要麽會意外更改其他文件上的設置。如果發生此行為,您可能會認為您對一個實際上具有限制性 ACL 的文件擁有操作權限。

多種原因

有時,您可能會同時遇到上述多個原因,這會使刪除文件的過程更復雜。例如,如果您作為計算機管理員登錄,可能會同時遇到原因 1(無權刪除文件)和原因 5(文件名包含一個尾隨字符,導致文件訪問重定向到其他文件或者不存在的文件),可能無法刪除該文件。如果嘗試通過取得文件的所有權和添加權限來解決原因 1 的問題,可能仍然無法刪除該文件,因為用戶界面中的 ACL 編輯器由於原因 6 而無法訪問到正確的文件。

在此情形中,您可以使用 Subinacl 實用工具和 /onlyfile 開關(此實用工具包括在資源工具包中)來更改文件的所有權和操作權限(若不更改則無法訪問),例如:
subinacl /onlyfile "\\?\c:\path_to_problem_file" /setowner=domain\administrator/grant=domain\administrator=F 註意:此命令是單行命令,這裏進行了換行是為了便於閱讀。

此示例命令行修改了包含尾隨空格的 C:\path_to_problem_file 文件,使 domain\administrator 帳戶成了該文件的所有者並對該文件擁有完全控制權限。現在您可以使用 Del 命令以及同一“\\?\”語法來刪除此文件。

參考

有關更多信息,請單擊下面的文章編號,以查看 Microsoft 知識庫中相應的文章:

319368 從已裝入的驅動器中刪除文件夾時收到“Access Denied”(拒絕訪問)錯誤消息

屬性

文章 ID:320081 - 上次審閱時間:2011年9月23日 - 修訂版本: 1

Microsoft Windows Server 2003, Datacenter Edition for Itanium-Based Systems, Microsoft Windows Server 2003, Enterprise Edition for Itanium-based Systems, Microsoft Windows Server 2003 Standard Edition, Microsoft Windows Server 2003 Datacenter Edition, Microsoft Windows Server 2003 Enterprise Edition, Microsoft Windows Server 2003 Web Edition, Microsoft Windows Small Business Server 2003 Premium Edition, Microsoft Windows Small Business Server 2003 Standard Edition, Microsoft Windows XP Professional Edition, Microsoft Windows XP Home Edition, Microsoft Windows 2000 Server, Microsoft Windows 2000 Advanced Server, Microsoft Windows 2000 Professional Edition, Microsoft Windows Advanced Server, Limited Edition, Microsoft Windows Datacenter Server Limited Edition

https://support.microsoft.com/zh-cn/help/320081/you-cannot-delete-a-file-or-a-folder-on-an-ntfs-file-system-volume

無法刪除 NTFS 盤上的文件或文件夾(對Windows文件的各種情況有比較詳細的描述)