怎样创建一个可以修改不可以删除的文件夹或文件呢?按如下方法设置:
然后在D盘打开cmd命令窗口运行:icacls 123
123 NT AUTHORITYSYSTEM:(OI)(CI)(F) NT AUTHORITYAuthenticated Users:(OI)(CI)(IO)(M) BUILTINUsers:(OI)(CI)(RX) NT AUTHORITYAuthenticated Users:(RX,W) 已成功处理 1 个文件; 处理 0 个文件时失败
icacls 123456
123456 BUILTINAdministrators:(DENY)(D) NT AUTHORITYSYSTEM:(OI)(CI)(F) NT AUTHORITYAuthenticated Users:(OI)(CI)(RX,W) BUILTINUsers:(OI)(CI)(RX) 已成功处理 1 个文件; 处理 0 个文件时失败
icacls 123789.txt
123789.txt NT AUTHORITYSYSTEM:(F) NT AUTHORITYAuthenticated Users:(RX,W) BUILTINUsers:(RX) 已成功处理 1 个文件; 处理 0 个文件时失败
如果输出同上,则设置成功了。现在目录456和文件789.txt即便是管理员也无法直接删除,由于它们都在123目录内,所以123也无法再删除。
如果想要删除时怎么办,修改目录和文件的权限,456目录去除拒绝删除权限,789文件修改“写入”权限为“修改”权限即可。
windows目录和文件权限实测总结 针对当前登录用户(可能具有管理员身份):
父目录如无写入权限则无法在目录内创建任何对象
系统的标准修改(M)权限包含了删除子权限,包含修改(M)即可删除,但可以自定义实现我们通常理解的可修改不可删除
显式指定给对象的权限优先于对象继承的权限,即指定的修改(M)大于继承的拒绝删除、指定的拒绝删除大于继承的修改(M)
如果子对象不可删除,则会连带其父目录也无法删除,但父目录重命名不受影响
对象本身(应用于含该文件夹)无修改权限则右键菜单“删除”前出现UAC图标(盾牌),能否删除还需要看父目录是否有删除子对象权限和该对象的子对象是否有删除权限
对象本身(应用于含该文件夹)无写入权限则右键菜单“重命名”前出现UAC图标,能否重命名还需要看父目录是否有写入权限或删除子对象权限
管理员如果具有容器(即父目录)的控制权限,即使没有容器内子对象的权限,甚至子对象本身有拒绝管理员删除的权限,也仍然能够删除子对象
用户有管理员身份时,子对象单独拒绝删除不起作用,但子对象的子对象即孙对象如去除删除权限或添加拒绝删除,则能达到拒绝删除的目的
继承拒绝删除,再指定可以删除,可以到达选择性删除的目的
意外发现:windows的重命名是通过父目录的写入+子对象的删除实现的,从上文所述“重命名”首先需要对象本身具有写入权限,然后父目录也具有写入权限,但实测发现对象本身只有写入权限无法成功重命名,必须有修改权限(包含了删除)才行。
另外可以证明这点的是,C#里面文件的Name属性是只读的,没有对应cmd的rename命令的方法,只有一个MoveTo方法可以实现重命名(MoveTo含义就是用新名字复制一份到新位置然后删除旧文件),而其他权限设置选项全部都有对应的方法和参数。
这说明了,如果想创建一个可以重命名但不可以删除的文件夹或文件是做不到的。但创建一个可以删除却不可以重命名的文件夹或文件是可能的,如下图第一种方案。
下面是更多测试结果:
上图的子对象(即子目录或文件)和父目录权限如不一致,表示是手动修改或添加的,如一致,可以是直接继承的。