• .NET文件类库


      这几日没时间学习程序,老师都安排我去听马克思哲学了,闲暇时间还要陪老婆聊天,今天算是学习文件操作的第一天,也就抽时间写个笔记,感觉.NET的IO命名空间下的文件操作类型是目前我遇到的几种语言中最丰富和简洁的所以很好学习,先画个文件类框架呗。

    任何编程语言操作文件都要调用操作系统的应用程序接口来实现,.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 = 1Write = 2,请考虑创建枚举常量 ReadWrite = Read OR Write,该常量组合了 ReadWrite 标志。此外,在某些情况下,可能会将用于组合标志的按位 OR 运算视为一种高级概念,在简单任务中不需要执行此操作。

     好了,总结一下就明白了,这里的 File.GetAttributes (file)返回的是一个枚举对象,FileAttributes.Hidden只是枚举内属性之一,我下面可以简单的举一个例子:

     1 using System;
    2
    3 class FlagsAttributeDemo
    4 {
    5 enum Color1 : short
    6 {
    7 Black = 0,
    8 Red = 1,
    9 Green = 2,
    10 Blue = 4
    11 };
    12
    13 [FlagsAttribute]
    14 enum Color2 : short
    15 {
    16 Black = 0,
    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的问题。

    OVER,老婆打电话来了.........................................

  • 相关阅读:
    隐藏PHP程序头部发出的:XPoweredBy: PHP/5.2.4类似的信息
    wtai无线应用简单方法
    七大你可能不知道的 Chrome 使用技巧
    常用JS图片滚动(无缝、平滑、上下左右滚动)
    精心挑选12款优秀的 JavaScript 日历和时间选择插件
    JS动态加载JS文件与CSS文件
    通用的JS表单验证插件代码
    dede(织梦)CMS后台的验证码不显示
    Sublime Text2 使用方法及快捷键
    Meta标签详解
  • 原文地址:https://www.cnblogs.com/rohelm/p/2392573.html
Copyright © 2020-2023  润新知