एक फ़ाइल से एक एकल गुण (जैसे ReadOnly) कैसे निकालें?


83

मान लीजिए, एक फ़ाइल में निम्नलिखित विशेषताएं हैं ReadOnly, Hidden, Archived, System:। मैं केवल एक विशेषता कैसे निकाल सकता हूं? (उदाहरण के लिए ReadOnly)

यदि मैं निम्नलिखित का उपयोग करता हूं, तो यह सभी विशेषताओं को हटा देता है:

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

वर्तमान विशेषताओं को पढ़ें, जिस विशेषता को आपको सेट करने की आवश्यकता है, उस विशेषता को मुखौटा करें ...
मिच गेहूं

जवाबों:


108

से MSDN : आप इस तरह किसी भी विशेषता को हटा सकते हैं

(लेकिन सिर्फ पढ़ने के लिए @ sll का जवाब उस विशेषता के लिए बेहतर है)

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;
    }
}

क्या करता ~है?
नौसिखिया

132

ReadOnlyविशेषता के संबंध में शीर्षक में आपके प्रश्न का उत्तर देना :

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

किसी भी विशेषता पर स्वयं नियंत्रण पाने के लिए आप File.SetAttributes()विधि का उपयोग कर सकते हैं । लिंक एक उदाहरण भी प्रदान करता है।


1
यह बहुत अच्छा काम करता है! लेकिन केवल ReadOnly विशेषता के लिए, (मुझे पता है कि मैंने शीर्षक में इसके लिए कहा था, लेकिन मुझे अन्य विशेषताओं की भी आवश्यकता है)
मिल्काइक

1
@qxxx: आप सही हैं, जैसा कि मैंने उल्लेख किया है कि आपको अन्य विशेषताओं को संशोधित करने के लिए SetAttributes () विधि का उपयोग करना होगा
sll

4
एक-लाइनर के रूप में: नया FileInfo (fileName) {IsReadOnly = false} .Refresh ()
Schneider

2
क्या रिफ्रेश () आवश्यक है? MSDN पर यह उदाहरण बताता है कि यह नहीं है, और अगर मैं इसे नहीं बुलाता तो मेरा कोड (मोनो के साथ सम्मिलित) काम करता है।
20

1
ताज़ा करना () मेरे लिए ज़रूरी नहीं है।
जेरेट


3
if ((oFileInfo.Attributes & FileAttributes.ReadOnly) == FileAttributes.ReadOnly)
    oFileInfo.Attributes ^= FileAttributes.ReadOnly;

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")

आदेश कोई फर्क नहीं पड़ता।

सी#

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

संदर्भ


ये प्रमुख सामग्री परिवर्तन नहीं हैं , वे सामग्री जोड़ हैं, और उनमें से कोई भी स्टैक ओवरफ्लो की भावना के लिए काउंटर नहीं चलाता है। वे अच्छे संपादन कर रहे हैं, उन्हें रहना चाहिए।
जॉर्ज स्टॉकर

3
ऐसा लगता है कि यह पूछने के बराबर है कि आपकी कार में तेल का एक चौथाई हिस्सा कहां जोड़ा जाना चाहिए, लेकिन कहा जा रहा है कि आपको इसे तेल बदलने के लिए अपने डीलरशिप पर ले जाना चाहिए। फ़ाइल विशेषता बिट को फ्लिप करने के लिए शेल कमांड को क्यों निष्पादित करें? उत्तर तकनीकी रूप से काम करता है इसलिए मैंने इसे कम नहीं किया, लेकिन मैंने अपने दिल में किया।
जेएमडी

@GeorgeStocker इसकी समीक्षा करने के लिए धन्यवाद, मैं इसकी सराहना करता हूं!
तेहदॉर्फ

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);
}

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.