.NET文件类库
任何编程语言操作文件都要调用操作系统的应用程序接口来实现,.NET框架提供了功能强大的统一的应用程序接口,在System.IO命名空间下,定义了多种文件管理,文件和数据流读写的类型。
废话也就不多说了,我们来看下我参考微软的官方实例写的例子
using System;using System.IO;namespace 文件操作
{
class Test
{
static void Main(string[] args)
{
string file = @"D:\test1.txt";
if (!File.Exists(file))
{
File.Create(file);
}
else
{
try {
if ((File.GetAttributes(file) & FileAttributes.Hidden) == FileAttributes.Hidden)
//如果文件被隐藏 {
File.SetAttributes(file, FileAttributes.Archive);
Console.WriteLine("文件不再被隐藏");
}
else //如果文件没有被隐藏 {
File.SetAttributes(file,File.GetAttributes(file)|FileAttributes.Hidden);
Console.WriteLine("文件被隐藏");
}
}
catch(Exception ex)
{
Console.WriteLine(ex.Message);
}
}
Console.ReadKey();
}
}
}
代码简单的也没什么看的,就那个意思,主要解决下面一行代码的取值方法:
if (File.GetAttributes(file) & FileAttributes.Hidden) == FileAttributes.Hidden)
这一句是怎么判断文件属性是否包含Hidden属性值,那么我们这里就来跟踪MSDN进行讲解下,大侠如有高见就给我留个言,我也学习一下。
1.File.GetAttributes 方法获取在此路径上的文件的 FileAttributes。
2.继续进入FileAttributes的解释:此枚举有一个 FlagsAttribute属性,允许其成员值按位组合。
3..我们再看FlagsAttribute属性:
只有要对数值执行按位运算(AND、OR、XOR)时才对枚举使用 FlagsAttribute 自定义属性。
用 2 的幂(即 1、2、4、8 等)定义枚举常量。这意味着组合的枚举常量中的各个标志都不重叠。
请考虑为常用标志组合创建一个枚举常量。例如,如果用于文件 I/O 操作的枚举包含枚举常量 Read = 1 和 Write = 2,请考虑创建枚举常量 ReadWrite = Read OR Write,该常量组合了 Read 和 Write 标志。
此外,在某些情况下,可能会将用于组合标志的按位 OR 运算视为一种高级概念,在简单任务中不需要执行此操作。www.zzzyk.com
好了,总结一下就明白了,这里的 File.GetAttributes (file)返回的是一个枚举对象,FileAttributes.Hidden只是枚举内属性之一,我下面可以简单的举一个例子:
1 using System;
2
3 class FlagsAttributeDemo
4
{
5 enum Color1 : short
6
{
7 Black = ,
8 Red = 1,
9 Green = 2,
10 Blue = 4
11
};
12
13 [FlagsAttribute]
14 enum Color2 : short
15
{
16 Black = ,
17 Red = 1,
18 Green = 2,
19 Blue = 4
20
};
21
22 static void Main()
23
{
24 Console.WriteLine("测试未使用FlagsAttribute属性");
25 Color1 MyColor1 = Color1.Red | Color1.Blue & Color1.Green;
26 //我先不运行计算一下看看是那个:0001|0100&0010=0001 应该是Red
27 Console.WriteLine("MyColor1={0}", MyColor1);
28 Color1 MyColor_1 = Color1.Red | Color1.Blue;
29 //我先不运行计算一下看看是那个:0001|0100=0101 应该是5
30 Console.WriteLine("MyColor_1={0}",MyColor_1);
31 Console.WriteLine("测试使用FlagsAttribute属性");
32 Color2 MyColor2 = Color2.Red | Color2.Blue;
33 //我先不运行计算一下看看是那个:0001|0100=0101应该是Red,Blue
34 Console.WriteLine("MyColor2={0}", MyColor2);
35 Console.ReadKey();
36
}
37
}
运行结果如下:
有上面的代码很人以看出二进制位运算的,那么
if (File.GetAttributes(file) & FileAttributes.Hidden) == FileAttributes.Hidden)
是不是很简单了,File.GetAttributes(file) & FileAttributes.Hidden返回的应该就是FileAttributes.Hidden;因此就可以判断是否包含Hidden属性。
当然实在不懂,可以用集合的概念理解下还更方便(|对应于取并集,&对应于取交集) 简单的说这个就是(a|b)&b=b的问题。
补充:Web开发 , ASP.Net ,