当前位置:编程学习 > asp >>

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

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的问题。
 

摘自  bochan
 

补充:Web开发 , ASP.Net ,
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,