位标志

class Program
    {
        static void Main(string[] args)
        {
            string file = Assembly.GetEntryAssembly().Location;
            FileAttributes attributes = File.GetAttributes(file);
            Console.WriteLine("Is {0} hidden?{1}", file, (attributes & FileAttributes.Hidden) != 0);
            //  File.SetAttributes(file, FileAttributes.ReadOnly | FileAttributes.Hidden);
            Action actions = Action.Read | Action.Delete;//未加Flags输出为5。Flags将把它视为一组位标志,输出Read,Delete
            //Action actions = Action.Read & Action.Delete;
            Console.WriteLine(actions.ToString());

            FileAttributes fa = FileAttributes.System;
            fa = fa.Set(FileAttributes.ReadOnly);
            Console.ReadKey();
        }
    }
    //17 & 13 = 10001 & 01101 = 00001 也就是1
    //17 | 13 = 10001 | 01101 = 11101 也就是 29

      
        [Flags]
    internal enum Action
    {
        None = 0,
        Read = 0x0001,
        Write = 0x0002,
        ReadWrite = Action.Read | Action.Write,
        Delete = 0x0004,
        Query = 0x0008,
        Sync = 0x0010
    }

    internal static class FileAttributesExtensionMethods
    {
        public static Boolean IsSet(this FileAttributes flags, FileAttributes flagToTest)
        {
                return (flags & flagToTest) == flagToTest;
        }

        public static FileAttributes Set(this FileAttributes flags, FileAttributes setFlags)
        {
            return flags | setFlags;
        }
    }
原文地址:https://www.cnblogs.com/Tan-sir/p/6095768.html