我是编程的新手,并且只使用用C#编写的标准控制台程序。
我目前正在实习,并且我被要求为他们设计一个小工具。
公平地说,这项任务超越了我的前进,而且与我以前用C#所做的完全不同。
该工具基本上必须执行以下操作:
用户选择要搜索的文件夹。
程序检查文件夹中的所有文件以及所有子文件夹和 如果尚未检查,则检查写保护。
如果当前没有,程序会在所有文件上设置只读属性。
如果这不是寻求帮助的地方,请忽略我的问题。
感谢阅读。
答案 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属性。