无法删除 NTFS 盘上的文件或文件夹

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

无法删除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命令以及同一“\\?\”语法来删除此文件。

相关文档
最新文档