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

时间:2014-01-13 12:33:51

标签: c# .net

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

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

公平地说,这项任务超越了我的前进,而且与我以前用C#所做的完全不同。

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

  

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

     

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

     

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

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

感谢阅读。

4 个答案:

答案 0 :(得分:7)

这几乎是来自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);
        }
    }

根据您的评论,为了更好地理解,让我们将其分解成碎片

获得文件路径后,创建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);
    }

答案 1 :(得分:2)

您可以通过

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

答案 2 :(得分:1)

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);
 }
}

答案 3 :(得分:0)

结帐DirectoryInfo。特别是Attributes属性。