如何检查文件夹的写保护?
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 属性。
【讨论】:
以上是关于如何检查文件夹的写保护?的主要内容,如果未能解决你的问题,请参考以下文章