您無法刪除 NTFS 檔案系統磁片區上的檔案或資料夾

本文說明為何無法刪除 NTFS 檔案系統磁片區上的檔案或資料夾。 它也會提供解決此問題的協助。

原始產品版本:   Windows Server 2012 R2
原始 KB 編號:   320081

注意

在內部,NTFS 會將資料夾視為特殊類型的檔案。 因此, 本文中的 word 檔案會指出檔案或資料夾。

原因1:檔案使用 ACL

如果檔案使用 (ACL) 的存取控制清單,便無法刪除檔案。 若要解決此問題,請變更檔上的許可權。 您可能需要取得檔案的擁有權才能變更許可權。

管理員具有取得任何檔案擁有權的隱含能力,即使尚未明確授與檔案的任何許可權。 檔案擁有者具有可修改檔許可權的隱含能力,即使未明確授與檔案許可權。 因此,您可能需要取得檔案的擁有權,並提供您刪除該檔案的許可權,然後刪除該檔案。

您無法使用特定的安全性工具來顯示或修改許可權,因為檔案具有非規範的 ACL

若要解決此問題,請使用另一個工具 (例如,Cacls.exe) 的後續組建。

ACL 中 (Ace) 的存取控制專案有特定的優先順序,視其類型而定。 例如,拒絕存取的 Ace 通常會在授與存取權的 Ace 之前。 不過,任何不會防止程式以任何任意順序寫入具有 Ace 的 ACL。 在某些舊版的 Windows 中,Windows 嘗試閱讀這些不規範的 ACLs 時會發生問題。 有時候,您無法使用 Microsoft Windows Explorer 圖形安全性編輯器來正確修改這些 ACLs。 此問題已在 Windows 的後續版本中修正。 如果您遇到此問題,請使用最新版本的 Cacls.exe。 即使您無法就地顯示或編輯 ACL,您還是可以撰寫新的 ACL 以取得檔案的存取權。

原因2:檔案正在使用中

如果檔案正在使用中,您就無法刪除檔案。 若要解決此問題,請判斷具有開啟控點的進程,然後關閉該程式。

視檔案的開啟方式而定,您可能無法刪除正在使用的檔案。 例如,以獨佔存取方式開啟檔案,而不是共用存取。 您可以使用各種工具,在任何需要時決定具有開啟檔案的處理常式。

這項問題的徵兆可能會有所不同。 您可以使用 [刪除] 命令刪除檔案。 不過,直到開啟檔案的處理常式釋放檔案後,才會刪除檔案。 此外,您可能無法存取暫止刪除檔案的安全性對話方塊。 若要解決此問題,請判斷具有開啟控點的進程,然後關閉該程式。

原因3:檔案系統損毀阻礙存取檔案

如果檔案系統損毀,您無法刪除檔案。 若要解決此問題,請在磁片磁片區上執行 Chkdsk 公用程式以修正任何錯誤。

下列原因可能會損毀檔案系統,並使檔案處於有問題的狀態:

  • 磁片上損壞的磁區
  • 其他有問題的硬體
  • 軟體錯誤

一般作業會以各種方式失敗。 當檔案系統偵測到損毀時,它會將事件記錄到事件記錄檔,而且您通常會收到一則提示您執行 Chkdsk 的訊息。 根據損毀的性質,Chkdsk 可能會或不會復原檔資料。 不過,Chkdsk 會將檔案系統傳回內部一致的狀態。

原因4:檔案位於 MAX_PATH 個字元以上的路徑中

如果檔案路徑有問題,您就無法開啟、編輯或刪除檔案。

解決方法1:使用自動產生的8.3 名稱來存取檔

若要解決此問題,您可能會想要使用自動產生的8.3 名稱來存取檔。 因為資料夾名稱過長,所以這種解決方式可能是最簡單的解決方法。 如果8.3 路徑也太長,或已停用磁片區上的8.3 名稱,請移至 解決 2。 如需在 NTFS 磁片區上停用8.3 檔案名的詳細資訊,請參閱 如何停用 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 保留名稱檢查(如果您使用特定語法來指定檔案的路徑)。

如果您使用一般的 Win32 CreateFile 機制來開啟檔案的控點,某些檔案名會保留給舊樣式 DOS 裝置。 為了向後相容,不允許這些檔案名,也無法使用一般的 Win32 檔案呼叫來建立這些檔案名。 此問題不是 NTFS 的限制。

您可以使用 Win32 程式,在建立或刪除檔案時使用與遍歷資料夾深度更深層的相同技術來略過一般名稱檢查 MAX_PATH 。 此外,有些 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 命令刪除此檔案 "\\?\"