创建一个可以修改但不可以删除的文件夹或文件
一、首先了解一下删除相关的权限。
二、怎样创建一个可以修改不可以删除的文件夹或文件呢?按如下方法设置:
123是父文件夹,这一步的目的是移除管理员的所有权限、去除父文件夹的“删除”权限。
现在目录456和文件789.txt即便是管理员也无法直接删除,由于它们都在123目录内,所以123目录本身也无法再被删除。
如果想要删除时怎么办,修改目录或文件的权限,删除“拒绝删除”权限即可。
windows目录和文件权限实测总结 针对当前登录用户(可能具有管理员身份):
注:
子对象(即子目录或文件)和父目录权限如不一致,表示是手动修改或添加的,如一致,可以是直接继承的。
父目录如无写入权限则无法在目录内创建任何对象,从回收站还原相当于创建文件。
如果具有容器(即父目录)的删除子文件夹及文件权限,即使没有容器内子对象的权限,甚至子对象自身有拒绝删除的权限,也仍然能够删除子对象。
在容器(即父目录)设置拒绝删除子文件夹及文件权限,没有任何作用,能否删除和重命名取决于子对象自身的权限设置。
系统管理员账户Administrators默认具有完全控制权限(包含了删除子文件夹及文件权限),右键删除会自动提权并删除,按Del键会询问你是否用管理员权限继续删除。
如果子对象不可删除,则会连带其父目录也无法删除,但父目录重命名不受影响。
用户有管理员身份时,子对象单独拒绝删除不起作用,但子目录的子对象即孙对象如去除删除权限或添加拒绝删除,则能达到拒绝删除的目的。
对象如无删除权限则右键菜单“删除”前出现UAC盾牌图标,具体能否删除还需要看父目录是否有删除子对象权限和该对象的子对象是否有删除权限。
对象如无写入权限则右键菜单“重命名”前出现UAC盾牌图标,具体能否重命名还需要看父目录是否有删除子对象权限或父目录是否有写入权限且该对象是否有删除权限。
注意:此处所指的权限是指计算该对象所有继承的与显式设置的允许权限和拒绝权限后得到的权限。
写入权限包括创建文件/写入数据、创建文件夹/附加数据、写入属性、写入扩展属性四项明细权限。
似乎重命名只需要对象自身具有写入权限,但实测发现对象自身只有写入权限无法成功重命名,必须有删除权限才行(修改包含了删除),并且父目录也要具有写入权限。
另外,C#里面文件的Name属性是只读的,没有对应cmd的rename命令的方法,只有一个MoveTo方法可以实现重命名(MoveTo含义就是用新名字复制一份到新位置然后删除旧文件),而其他权限设置选项全部都有对应的方法和参数。