如何检查文件夹的写保护?

Posted

技术标签:

【中文标题】如何检查文件夹的写保护?【英文标题】:How do I check folders for write-protection? 【发布时间】:2014-01-13 12:33:50 【问题描述】:

我是编程新手,只使用过用 C# 编写的标准控制台程序。

我目前正在实习,我被要求为他们设计一个小工具。

说句公道话,这个任务远远超出了我的预期,与我之前使用 C# 所做的完全不同。

该工具基本上必须执行以下操作:

用户选择了要搜索的文件夹。

程序检查文件夹中的所有文件,以及所有子文件夹,以及 如果尚未检查,则检查写保护。

程序在所有文件上设置只读属性,如果当前没有。

如果这里不是寻求帮助的地方,请忽略我的问题。

感谢阅读。

【问题讨论】:

C# Test if user has write access to a folder的可能重复 感谢您的所有回答。恐怕这对我来说任务太大了。我只创建了非常简单的控制台应用程序,而且我以前从未见过像“var”、“attr”这样的命令——当我们使用 C# 时,已经设置了“Public void ______”等内容,所以当你写那个时,我明白这对我来说太复杂了。我尝试将 Avi Turner 编写的最终代码复制/粘贴到我的程序中,但它不会将命令识别为“var”。也许我写错地方了,我不知道。 你能显示你当前的代码吗?只需将其粘贴到 Pastebin.com。 var 是一个变量声明,attr 是变量的名称,等号后面是声明的值。 @JFBN 我认为您无缘无故地劝阻自己。例如 var 只是一个快捷方式,可以替换为对象的类型(例如字符串)。我建议你不要那么快放弃,花点时间学习。开始总是更难。如果您在第一次作业中需要帮助,非常欢迎您通过电子邮件与我联系:avi.turner111 at google's mail。 pastebin.com/wxN3f2P1 这是我当前代码的链接。也许这种代码不能用作控制台程序?到目前为止,我在学校期间基本上只有 3 周的基本 C# 时间,所以我们所做的只是基本的“WriteLine”、“SetCursorPosition”、“ReadLine”等命令,用于愚蠢的事情。跨度> 【参考方案1】:

这几乎是来自this thread的复制粘贴:

完整的代码应该类似于:

    public void SetAllFilesAsReadOnly(string rootPath)
    
        //this will go over all files in the directory and sub directories
        foreach (string file in Directory.EnumerateFiles(rootPath, "*.*", SearchOption.AllDirectories))
        
            //Getting an object that holds some information about the current file
            FileAttributes attr = File.GetAttributes(file);

            // set the file as read-only
            attr = attr | FileAttributes.ReadOnly;
            File.SetAttributes(file,attr);
        
    

跟着你的cmets,为了更好的理解,让我们把它分解成碎片

获得文件路径后,创建file attribute 对象:

var attr = File.GetAttributes(path);

对于以下内容,您可能想了解一下enum flags and bitwise

这就是你设置为Read only的方式:

// set read-only
attr = attr | FileAttributes.ReadOnly;
File.SetAttributes(path, attr);

这就是你取消设置为Read only的方式:

// unset read-only
attr = attr & ~FileAttributes.ReadOnly;
File.SetAttributes(path, attr);

为了获取所有你可以使用的文件:

 foreach (string file in Directory.EnumerateFiles(path, "*.*", SearchOption.AllDirectories))
    
        Console.WriteLine(file);
    

【讨论】:

【参考方案2】:

您可以通过

查看
FileAttributes attr = File.GetAttributes(path);
            if(attr.HasFlag( FileAttributes.ReadOnly ))
            
             //it is readonly   
            

【讨论】:

当你写“(path);”时,我应该用文件的实际路径来改变它,是吗?【参考方案3】:

This MSDN thread 介绍以下获取文件夹权限的代码示例:

DirectorySecurity dSecurity = Directory.GetAccessControl(@"d:\myfolder");
foreach (FileSystemAccessRule rule in dSecurity.GetAccessRules(true, true, typeof(NTAccount)))

 if (rule.FileSystemRights == FileSystemRights.Read)
 
  Console.WriteLine("Account:0", rule.IdentityReference.Value);
 

【讨论】:

【参考方案4】:

查看DirectoryInfo。特别是 Attributes 属性。

【讨论】:

以上是关于如何检查文件夹的写保护?的主要内容,如果未能解决你的问题,请参考以下文章

注册表成功已经成功,但我要删文件时显示 无法删除(我要删的文件名):磁盘被写保护 请去掉写保护或使用

PHP程序员如何保护身体

如何检查文件是不是通过 7zip 受密码保护?

elasticsearch 触发写保护

linux写保护文件如何产生

“使用Gem命令安装Sass时,您没有/ usr / bin目录的写权限。”