2011-09-13 17 views
64

たとえば、ファイルの属性は次のとおりです。ReadOnly, Hidden, Archived, System属性を1つだけ削除するにはどうすればよいですか?私が使用している場合は、(例えば、読み取り専用のため)ファイルから単一の属性(ReadOnlyなど)を削除するにはどうすればよいですか?

Io.File.SetAttributes("File.txt",IO.FileAttributes.Normal) 

それはすべての属性を削除します。

+0

は、あなたが設定する必要が属性を隠し、現在の属性を読み取る属性... –

答えて

79

:あなたが好きな任意の属性を削除することができ、この

using System; 
using System.IO; 
using System.Text; 
class Test 
{ 
    public static void Main() 
    { 
     string path = @"c:\temp\MyTest.txt"; 

     // Create the file if it exists. 
     if (!File.Exists(path)) 
     { 
      File.Create(path); 
     } 

     FileAttributes attributes = File.GetAttributes(path); 

     if ((attributes & FileAttributes.ReadOnly) == FileAttributes.ReadOnly) 
     { 
      // Make the file RW 
      attributes = RemoveAttribute(attributes, FileAttributes.ReadOnly); 
      File.SetAttributes(path, attributes); 
      Console.WriteLine("The {0} file is no longer RO.", path); 
     } 
     else 
     { 
      // Make the file RO 
      File.SetAttributes(path, File.GetAttributes(path) | FileAttributes.Hidden); 
      Console.WriteLine("The {0} file is now RO.", path); 
     } 
    } 

    private static FileAttributes RemoveAttribute(FileAttributes attributes, FileAttributes attributesToRemove) 
    { 
     return attributes & ~attributesToRemove; 
    } 
} 
+0

Thxたくさん、それは私が必要としていたものの多くであった。D – Bjqn

102

ReadOnly属性に関するタイトルにあなたの質問に答える:

FileInfo fileInfo = new FileInfo(pathToAFile); 
fileInfo.IsReadOnly = false; 

あなたがFile.SetAttributes()メソッドを使用することができ、自分の属性の任意のコントロールを取得するには。このリンクにも例があります。 MSDNから

+1

この作品を設定しますすばらしいです! ReadOnly属性のみ(私はタイトルで尋ねたが、他の属性も必要です) – MilMike

+1

@qxxx:あなたはSetAttributes()メソッドを使って別の属性を変更する必要があると述べたので、 – sll

+3

-liner:新しいFileInfo(ファイル名){IsReadOnly = false} .Refresh() –

11
(現在のユーザーが言及したファイルの属性を変更するアクセス権を持っている場合)1行のソリューションについては0
+0

.HasFlag(SOMEFLAG);働く? – Bjqn

+0

@Bjqn、新しい質問をする! –

+0

ええ、私は本当に知る必要はありません:) – Bjqn

1

ここで私はそれを行うだろうかされています

VB.Net

Shell("attrib file.txt -r") 

負の符号はremoveを意味し、rは読み取り専用です。あなたは同様に他の属性を削除したい場合は あなたはどうなる:読み取り専用、システム・ファイルを削除します

Shell("attrib file.txt -r -s -h -a") 

は、隠しおよびアーカイブ属性。

あなたはこれらの属性をお返ししたい場合は、ここではどのようである:順序は重要ではありません

Shell("attrib file.txt +r +s +h +a") 

C#

Process.Start("cmd.exe", "attrib file.txt +r +s +h +a"); 

参照

+0

これらは主要なコンテンツ*変更ではなく、コンテンツの追加であり、どれもスタックオーバーフローの精神に反するものではありません。彼らは良い編集だ、彼らは滞在する必要があります。 –

+1

これはあなたの車にオイルのクォートを加える場所を尋ねるのと同じようですが、あなたはオイル交換のためにあなたのディーラーにそれを持って行くべきだと言われています。なぜファイル属性ビットを反転するだけのシェルコマンドを実行するのですか?答えは技術的に機能するので、私はダウンボートしなかったが、私は心の中でやった。 – JMD

+0

@GeorgeStockerレビューをお寄せいただき、ありがとうございます! – tehDorf

1
/// <summary> 
/// Addes the given FileAttributes to the given File. 
/// It's possible to combine FileAttributes: FileAttributes.Hidden | FileAttributes.ReadOnly 
/// </summary> 
public static void AttributesSet(this FileInfo pFile, FileAttributes pAttributes) 
{ 
    pFile.Attributes = pFile.Attributes | pAttributes; 
    pFile.Refresh(); 
} 

/// <summary> 
/// Removes the given FileAttributes from the given File. 
/// It's possible to combine FileAttributes: FileAttributes.Hidden | FileAttributes.ReadOnly 
/// </summary> 
public static void AttributesRemove(this FileInfo pFile, FileAttributes pAttributes) 
{ 
    pFile.Attributes = pFile.Attributes & ~pAttributes; 
    pFile.Refresh(); 
} 

/// <summary> 
/// Checks the given File on the given Attributes. 
/// It's possible to combine FileAttributes: FileAttributes.Hidden | FileAttributes.ReadOnly 
/// </summary> 
/// <returns>True if any Attribute is set, False if non is set</returns> 
public static bool AttributesIsAnySet(this FileInfo pFile, FileAttributes pAttributes) 
{ 
    return ((pFile.Attributes & pAttributes) > 0); 
} 

/// <summary> 
/// Checks the given File on the given Attributes. 
/// It's possible to combine FileAttributes: FileAttributes.Hidden | FileAttributes.ReadOnly 
/// </summary> 
/// <returns>True if all Attributes are set, False if any is not set</returns> 
public static bool AttributesIsSet(this FileInfo pFile, FileAttributes pAttributes) 
{ 
    return (pAttributes == (pFile.Attributes & pAttributes)); 
} 

例:

private static void Test() 
{ 
    var lFileInfo = new FileInfo(@"C:\Neues Textdokument.txt"); 
    lFileInfo.AttributesSet(FileAttributes.Hidden | FileAttributes.ReadOnly); 
    lFileInfo.AttributesSet(FileAttributes.Temporary); 
    var lBool1 = lFileInfo.AttributesIsSet(FileAttributes.Hidden); 
    var lBool2 = lFileInfo.AttributesIsSet(FileAttributes.Temporary); 
    var lBool3 = lFileInfo.AttributesIsSet(FileAttributes.Encrypted); 
    var lBool4 = lFileInfo.AttributesIsSet(FileAttributes.ReadOnly | FileAttributes.Temporary); 
    var lBool5 = lFileInfo.AttributesIsSet(FileAttributes.ReadOnly | FileAttributes.Encrypted); 
    var lBool6 = lFileInfo.AttributesIsAnySet(FileAttributes.ReadOnly | FileAttributes.Temporary); 
    var lBool7 = lFileInfo.AttributesIsAnySet(FileAttributes.ReadOnly | FileAttributes.Encrypted); 
    var lBool8 = lFileInfo.AttributesIsAnySet(FileAttributes.Encrypted); 
    lFileInfo.AttributesRemove(FileAttributes.Temporary); 
    lFileInfo.AttributesRemove(FileAttributes.Hidden | FileAttributes.ReadOnly); 
} 
2
if ((oFileInfo.Attributes & FileAttributes.ReadOnly) == FileAttributes.ReadOnly) 
    oFileInfo.Attributes ^= FileAttributes.ReadOnly; 
関連する問題