如何以编程方式从C#中的目录中删除readonly属性?
答案 0 :(得分:81)
var di = new DirectoryInfo("SomeFolder");
di.Attributes &= ~FileAttributes.ReadOnly;
答案 1 :(得分:5)
这是使用c#
修改文件属性的示例的良好链接http://www.csharp-examples.net/file-attributes/
根据他们的例子,您可以删除这样的只读属性(我没有测试过这个):
File.SetAttributes(filePath, File.GetAttributes(filePath) & ~FileAttributes.ReadOnly);
答案 2 :(得分:4)
使用 - =赋值运算符是危险的,原因有两个: 1)仅在设置了ReadOnly属性时才有效,因此需要事先进行测试。 2)它正在执行减法运算,这在使用二进制标志时不是最佳选择。如果条件1(上面)为真,则减法操作有效,但在FileAttributes字段中,其他减法操作将改为其他位!
使用“& = ~FileAttributes.ReadOnly;”重置ReadOnly标志。
使用“| = FileAttributes.ReadOnly;”设置ReadOnly标志。
答案 3 :(得分:2)
如果您尝试删除文件系统中文件的属性,请创建System.IO.FileInfo类的实例,并将属性IsReadOnly设置为false。
FileInfo file = new FileInfo("c:\\microsoft.text");
file.IsReadOnly = false;
答案 4 :(得分:0)
终于搞定了。 ;)
class Program
{
static void Main(string[] args)
{
DirectoryInfo di = new DirectoryInfo("c:\\test");
FileAttributes f = di.Attributes;
Console.WriteLine("Directory c:\\test has attributes:");
DecipherAttributes(f);
}
public static void DecipherAttributes(FileAttributes f)
{
// To set use File.SetAttributes
File.SetAttributes(@"C:\test", FileAttributes.ReadOnly);
if ((f & FileAttributes.ReadOnly) == FileAttributes.ReadOnly)
Console.WriteLine("ReadOnly");
// To remove readonly use "-="
f -= FileAttributes.ReadOnly;
if ((f & FileAttributes.ReadOnly) == FileAttributes.ReadOnly)
Console.WriteLine("ReadOnly");
else
Console.WriteLine("Not ReadOnly");
}
}
答案 5 :(得分:0)
在文件夹和文件上将属性设置为FileAttributes.Normal
。
答案 6 :(得分:0)
public static void DeleteDirectory(string path)
{
var directory = new DirectoryInfo(path)
{ Attributes =FileAttributes.Normal };
foreach (var info in directory.GetFileSystemInfos("*", SearchOption.AllDirectories))
{
info.Attributes = FileAttributes.Normal;
}
directory.Delete(true);
}
答案 7 :(得分:0)
如果某件事不起作用,该版本将立即包含所有内容
this._path = System.IO.Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.MyDocuments), "My App Settings");
if (!Directory.Exists(this._path))
{
Directory.CreateDirectory(this._path);
DirectoryInfo directoryInfo = new DirectoryInfo(this._path);
directoryInfo.Attributes &= ~FileAttributes.ReadOnly;
FileSystemInfo[] info = directoryInfo.GetFileSystemInfos("*", SearchOption.AllDirectories);
for (int i = 0; i < info.Length; i++)
{
info[i].Attributes = FileAttributes.Normal;
}
}