无法删除 NTFS 盘上的文件或文件夹(对Windows文件的各种情况有比较详细的描述)
简介
更多信息
原因 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 知识库中相应的文章:
此问题的症状可能多种多样。您可以使用“删除”命令来删除一个文件,但在打开该文件的进程释放该文件之前,该文件实际上并未删除。另外,您可能无法访问正在删除中的文件的“安全”对话框。要解决此问题,请确定具有打开句柄的进程,然后关闭此进程。
原因 3:文件系统损坏使您无法访问此文件
如果文件系统被破坏,则可能无法删除此文件。要解决此问题,请在磁盘卷上运行 Chkdsk 实用工具以纠正任何存在的错误。
磁盘上的坏区、其他硬件故障或者软件错误都可能会损坏文件系统,使文件出现问题。典型操作失败的方式可能各不相同。当文件系统检测到有损坏时,它将在事件日志中记录一个事件,而且您通常会收到一条提示您运行 Chkdsk 的消息。根据损坏的性质,Chkdsk 可能能够也可能无法恢复文件数据;不过,Chkdsk 可以使文件系统返回到一种在内部一致的状态。 有关如何使用 Chkdsk 实用工具的其他信息,请单击下面的文章编号,以查看 Microsoft 知识库中相应的文章:
原因 4:文件位于比 MAX_PATH 字符更深的路径中
如果文件路径存在问题,则可能无法打开、编辑或删除该文件。
解决方案 1:使用自动生成的 8.3 名称访问该文件
要解决此问题,您可能需要使用自动生成的 8.3 名称访问该文件。如果路径深的原因是文件夹名称太长,则这可能是最简便的解决方案。如果 8.3 路径也太长,或者 8.3 名称已在该卷上被禁用,则请转到解决方案 2。 有关在 NTFS 卷上禁用 8.3 文件名的其他信息,请单击下面的文章编号,以查看 Microsoft 知识库中相应的文章:
解决方案 2:重命名或移动路径深的文件夹
重命名文件夹,以使目标文件的路径深度不超过 MAX_PATH。如要这样做,请从根文件夹(或任何其他方便的位置)开始,然后重命名文件夹,以缩短它们的名称。如果此步骤不能解决此问题(例如,如果文件的深度超过 128 个文件夹),请转到解决方案 4。
解决方案 3:将驱动器映射到路径结构中的一个文件夹
将驱动器映射到目录文件或文件夹的路径结构中的一个文件夹。该方法可缩短实际上的路径。
例如,假定您有一个类似如下结构的路径:
在该路径中,总字符数超过 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”的文件:
有关在 Windows NT 和 Windows 2000 下删除具有保留名称的文件的更多信息,请单击下面的文章编号,以查看 Microsoft 知识库中相应的文章:
有关在 Windows XP 下删除具有保留名称的文件的更多信息,请单击下面的文章编号,以查看 Microsoft 知识库中相应的文章:
如果使用典型的 Win32 CreateFile 机制打开到某个文件的句柄,则某些文件名称是为旧式 DOS 设备保留的。为了向后兼容,不允许使用这些文件名,也不能使用典型的 Win32 文件调用来创建它们。不过,此问题并不是 NTFS 的一种限制。
通过使用遍历超过 MAX_PATH 的文件夹时所用的那种技巧,您或许能够使用 Win32 程序绕过在创建(或删除)文件时执行的典型名称检查。另外,有些 POSIX 工具不接受这些名称检查。
原因 6:文件名包括 Win32 命名空间中的无效名称
如果文件名中包括无效名称,您可能无法删除该文件(例如,文件名有一个尾随空格,或一个尾随句点,或者文件名仅由一个空格组成)。要解决此问题,请用一种使用适当内部语法的工具删除此文件。您可以将“\\?\”语法用于某些工具,以便对这些文件进行操作,例如:
导致此问题的原因与原因 4 类似。然而,如果使用典型的 Win32 语法打开名称中有尾随空格或尾随句点的文件,则尾随空格或句点在打开实际文件之前会被去掉。因此,如果在同一个文件夹中有两个分别名为“AFile.txt”和“AFile.txt ”的文件(注意文件名后面的空格),如果您尝试使用标准 Win32 调用打开第二个文件,实际上会打开第一个文件。同样,如果文件的名称仅是“ ”(一个空格字符),当尝试使用标准 Win32 调用打开它时,实际上会打开该文件的父文件夹。在此情况下,如果您尝试更改这些文件上的安全设置,要么无法更改,要么会意外更改其他文件上的设置。如果发生此行为,您可能会认为您对一个实际上具有限制性 ACL 的文件拥有操作权限。
多种原因
有时,您可能会同时遇到上述多个原因,这会使删除文件的过程更复杂。例如,如果您作为计算机管理员登录,可能会同时遇到原因 1(无权删除文件)和原因 5(文件名包含一个尾随字符,导致文件访问重定向到其他文件或者不存在的文件),可能无法删除该文件。如果尝试通过取得文件的所有权和添加权限来解决原因 1 的问题,可能仍然无法删除该文件,因为用户界面中的 ACL 编辑器由于原因 6 而无法访问到正确的文件。
在此情形中,您可以使用 Subinacl 实用工具和 /onlyfile 开关(此实用工具包括在资源工具包中)来更改文件的所有权和操作权限(若不更改则无法访问),例如:
注意:此命令是单行命令,这里进行了换行是为了便于阅读。
此示例命令行修改了包含尾随空格的 C:\path_to_problem_file 文件,使 domain\administrator 帐户成了该文件的所有者并对该文件拥有完全控制权限。现在您可以使用 Del 命令以及同一“\\?\”语法来删除此文件。
参考
属性
文章 ID:320081 - 上次审阅时间:2011年9月23日 - 修订版本: 1
无法删除 NTFS 盘上的文件或文件夹(对Windows文件的各种情况有比较详细的描述)的更多相关文章
- java 打印流 递归复制子文件子文件夹 不同编码文件复制到同一文件中 序列化流反序列化流
package com.swift.jinjie; import java.io.BufferedInputStream; import java.io.File; import java.io.Fi ...
- Windows如何自定义U盘盘符、文件夹图标、文件夹背景
自定义U盘盘符.文件夹图标.文件夹背景 注意对于Vista和Win7的用户不支持文件夹图标和文件夹背景的更换 1.自定义盘符:在U盘根目录下新建文件 autorun.inf(可先建.txt文本文档,再 ...
- Linux与windows文件乱码问题
Linux与windows文件乱码问题 */--> Linux与windows文件乱码问题 Table of Contents 1. 简介 2. iconv详解 2.1. iconv –help ...
- 使用QFileInfo类获取文件信息(在NTFS文件系统上,出于性能考虑,文件的所有权和权限检查在默认情况下是被禁用的,通过qt_ntfs_permission_lookup开启和操作。absolutePath()必须查询文件系统。而path()函数,可以直接作用于文件名本身,所以,path() 函数的运行会更快)
版权声明:本文为博主原创文章,未经博主允许不得转载. https://blog.csdn.net/Amnes1a/article/details/65444966QFileInfo类为我们提供了系统无 ...
- [sharepoint]rest api文档库文件上传,下载,拷贝,剪切,删除文件,创建文件夹,修改文件夹属性,删除文件夹,获取文档列表
写在前面 最近对文档库的知识点进行了整理,也就有了这篇文章,当时查找这些接口,并用在实践中,确实废了一些功夫,也为了让更多的人走更少的弯路. 系列文章 sharepoint环境安装过程中几点需要注意的 ...
- 删除D盘空目录 、检索大于10M的文件
删除D盘空目录 @echo off for %%i in (d:\xx) do ( if exist %%i:\ ( for /f "delims=" %%a in ('dir / ...
- JAVA通过FTP方式向远程服务器或者客户端上传、下载文件,以及删除FTP服务器上的文件
1.在目标服务器上搭建FTP服务器 搭建方式有多种大家可以自行选择,例如使用Serv-U或者FTPServer.exe:这里我以FTPServer.exe为例搭建:在目标服务器(这里对应的IP是10. ...
- linux定时脚本:删除linux/HDFS上过期文件
一.定时删除linux上定时的文件 显示20分钟前的文件 -exec ls -l {} \; 删除20分钟前的文件 -exec rm {} \; 显示20天前的文件 -exec ls -l {} \; ...
- 删除C盘垃圾文件bat
@ECHO OFF@echo 此批处理由59互联(http://www.59.cn)整理发布@echo @echo 清理几个比较多垃圾文件的地方DEL /F /S /Q "C:\WINDOW ...
随机推荐
- C++常用数据结构的实现
常用数据结构与算法的实现.整理与总结 我将我所有数据结构的实现放在了github中:Data-Structures-Implemented-By-Me 常用数据结构与算法的实现.整理与总结 KMP字符 ...
- 【hdu 3951】Coin Game
Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) Total Submission(s) ...
- matplotlib油漆基础
http://blog.csdn.net/pipisorry/article/details/37742423 matplotlib介绍 matplotlib 是python最著名的画图库,它提供了一 ...
- sitecore-CMS
安装sitecore数据库和客户端到本机 (提前先装好数据库和IIS) 安装教程下载:http://download.csdn.net/detail/qq1162195421/6436799 安装 ...
- CodeBlocks环境搭建及创建第一个C++程序
某业界大牛推荐最佳的途径是从raytracing入门,所以本屌开始学习<Ray Tracing In One Weekend>. 该书是基于C++的.本屌从未学过C++.感觉告诉我,要先搭 ...
- [ACM] POJ 1094 Sorting It All Out (拓扑排序)
Sorting It All Out Time Limit: 1000MS Memory Limit: 10000K Total Submissions: 26801 Accepted: 92 ...
- opencc 繁体简体互转 (C++)
繁体字通常采用BIG5编码,简体字通常采用GBK或者GB18030编码,这种情况下,直接使用iconv(linux下有对应的命令,也有对应的C API供编程调用)就行.对于默认采用utf-8 ...
- jquery 源码学习(四)构造jQuery对象-工具函数
jQuery源码分析-03构造jQuery对象-工具函数,需要的朋友可以参考下. 作者:nuysoft/高云 QQ:47214707 EMail:nuysoft@gmail.com 声明:本文为原 ...
- template.js小小说明
教程 template.js 一款 JavaScript 模板引擎,简单,好用.提供一套模板语法,用户可以写一个模板区块,每次根据传入的数据,生成对应数据产生的HTML片段,渲染不同的效果. 简介 主 ...
- url参数解析
http://happycoder.net/parse-querystring-using-regexp/ http://www.cnblogs.com/babycool/p/3169058.html ...