How does this C # operator work in this piece of code?

I found this piece of code on SO (sorry, I don't have a link to the question / answer command)

 bool isDir = (File.GetAttributes(source) & FileAttributes.Directory) == FileAttributes.Directory;

It bothers me because it FileAttributes.Directoryis on both sides of ==.

What is doing &in this case? I am not sure how to read this line of code. I am trying to evaluate if a path string is a file or directory.

+5
source share
10 answers

A bitmask is used to check if one bit is set (FileAttributes.Directory).

Enumeration values ​​are powers of two corresponding to individual bits.

    ReadOnly = 1,
    Hidden = 2,
    System = 4,
    Directory = 16,
    Archive = 32,
    Device = 64,

ReadOnly Directory , FileAttributes 17. :

File.GetAttributes(source) = 00001001   
FileAttributes.Directory   = 00001000 &
-------------------------------------
                             00001000

Directory , :

File.GetAttributes(source) = 00000001   
FileAttributes.Directory   = 00001000 &
-------------------------------------
                             00000000

, , :

bool isDir = (File.GetAttributes(source) & FileAttributes.Directory) != 0;
+5

" ". , AttributeFlags.Directory, , .Directory.

-: http://weblogs.asp.net/wim/archive/2004/04/07/109095.aspx

[Flags]
public enum FileAttributes
{
  Archive,        // 0000
  Compressed,     // 0001
  Device,         // 0010
  Directory,      // 0100
  Encrypted,       // 1000
  ...
}

:

 File.GetAttributes(source):  1101
 FileAttributes.Directory:    0100
 (Logical AND):               0100

0100 , , .

+5

. , FileAttributes Directory, , , source, .

+2

& and.

+1

- File.GetAttributes(source) ( ), . & 1 , FileAttributes.Directory ( , ). , 16, .. () ..0001000

source ReadOnly (= 1), Hidden (= 2) Directory (= 16):

...0001011

we 16

...0001000

...0001000

, .

System (= 4) ReadOnly (= 1) ( ), :

...0000101

we 16

...0001000

...0000000

.

; a == , all ( ). != 0, .

+1

AND. FileAttributes - . , , .

0

, FileAttributes.Directory , File.GetAttributes. , MSDN.

, .

System.IO, Directory.Exists:

if (Directory.Exists(path))
{
    // it a directory
} 
else if (File.Exists(path))
{
    // it a file
}
else
{
   // doesn't exist
}
0

GetAttributes , . , Directory, , GetAttributes.

, , . :

bool isDir = File.GetAttributes(source).HasFlag(FileAttributes.Directory);

, Directory:

bool isDir = File.GetAttributes(source) == FileAttributes.Directory;

HasFlag() , . HasFlag , , - .

0

All Articles