检查文件属性枚举
本文关键字:枚举 文件属性 检查 | 更新日期: 2023-09-27 18:16:02
c#新手,我真的不明白下面的代码是如何确定文件是否是只读的。特别是,(属性&== FileAttributes.ReadOnly.
我猜是&是在做某种位与运算吗??我只是不明白这是怎么回事。有人能解释一下吗?
using System;
using System.IO;
namespace ConsoleApplication
{
class Program
{
static void Main(string[] args)
{
FileAttributes attributes = File.GetAttributes("c:/Temp/testfile.txt");
if ((attributes & FileAttributes.ReadOnly) == FileAttributes.ReadOnly)
{
Console.WriteLine("read-only file");
}
else
{
Console.WriteLine("not read-only file");
}
}
}
}
语句attributes & FileAttributes.ReadOnly
是位与。这意味着如果在attributes
中设置了适当的位,它将返回FileAttributes.ReadOnly
的值,否则将返回0。
位与运算采用两个长度相等的二进制表示,并对每一对对应的位执行逻辑与运算。如果第一个位为1,第二个位为1,则每个位置的结果为1;否则,结果为0。
这样做的原因是,一个文件可以设置许多属性。例如:Hidden
(值2)、ReadOnly
(值1)、System
(值4)文件。该文件的属性将是所有这些属性的按位或。文件属性的值应该是1+2+4 = 7。
执行简单的相等性检查,例如
if ( attributes == FileAttributes.ReadOnly )
将返回false,因为7 != 1
。但按位与,确实显示只读位已设置。在二进制中,它看起来像:
Attributes: 0111
ReadOnly : 0001
AND : 0001
正如@cadrell0所指出的那样,enum
类型可以使用HasFlag方法为您处理此问题。检查只读标志变得简单多了,看起来像
if ( attributes.HasFlag( FileAttributes.ReadOnly ) )
{
Console.WriteLine("read-only file");