我该如何使用C#编程来从目录中移除readonly属性?
我该如何使用C#编程来从目录中移除readonly属性?
var di = new DirectoryInfo("SomeFolder");
di.Attributes &= ~FileAttributes.ReadOnly;
File.SetAttributes(filePath, File.GetAttributes(filePath) & ~FileAttributes.ReadOnly);
-=
赋值运算符有两个危险之处:
ReadOnly
属性设置时才有效,因此需要事先进行测试。
&= ~FileAttributes.ReadOnly;
命令删除ReadOnly
标志。
|= FileAttributes.ReadOnly;
命令应用ReadOnly
标志。 FileInfo file = new FileInfo("c:\\microsoft.text");
file.IsReadOnly = false;
如果某些内容无法正常工作,则可以使用一次性包含所有内容的版本。
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;
}
}
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);
}
将属性设置为FileAttributes.Normal
对我在文件夹和文件上都有效。
终于搞定了。 ;)
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");
}
}