標籤:access cto 記錄 top 組成 scope str space main
簡介本文介紹您可能無法刪除 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檔案的各種情況有比較詳細的描述)