C#のディレクトリから読み取り専用属性をプログラムで削除するにはどうすればよいですか?
var di = new DirectoryInfo("SomeFolder");
di.Attributes &= ~FileAttributes.ReadOnly;
C#を使用してファイル属性を変更する例へのリンクを次に示します。
http://www.csharp-examples.net/file-attributes/
その例に基づいて、次のように読み取り専用属性を削除できます(これはテストしていません)。
File.SetAttributes(filePath, File.GetAttributes(filePath) & ~FileAttributes.ReadOnly);
-=代入演算子の使用は、次の2つの理由で危険です。1)ReadOnly属性が設定されている場合にのみ機能するため、事前にテストが必要です。 2)減算操作を実行していますが、バイナリフラグを使用する場合、これは最良の選択ではありません。条件1(上記)が真の場合、減算操作は機能しますが、追加の減算操作は、FileAttributesフィールドでALTER OTHER BITS!
「&=〜FileAttributes.ReadOnly;」を使用しますReadOnlyフラグをリセットします。
「| = FileAttributes.ReadOnly;」を使用しますReadOnlyフラグを設定します。
ファイルシステム内のファイルの属性を削除しようとしている場合は、System.IO.FileInfoクラスのインスタンスを作成し、IsReadOnlyプロパティをfalseに設定します。
FileInfo file = new FileInfo("c:\\Microsoft.text");
file.IsReadOnly = false;
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);
}
やっと手に入れました。 ;)
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");
}
}
属性をFileAttributes.Normal
に設定すると、foldersとfilesの両方で機能しました。