本课的主题,路径(Path)、目录(Directory)和文件(File),在.NET Framework类库中,它们的处理资源定义在System.IO命名空间,代码文件中注意引用。

路径

定义目录和文件的位置时,路径的处理是很重要的,在C#中,可以使用字符串定义路径,但需要注意“\”等特殊字符的处理,可以使用转义字符或逐字字符串(使用@字符定义),如"C:\test.txt"或@"C:\test.txt"都指向C盘下的test.txt文件。

当有了一个描述字符串的路径后,就可以使用Path类进一步的处理,如下面的代码测试了Path类中的几个方法。

    static void Main(string[] args)
    {
        string p = @"C:\test.txt";
        Console.WriteLine(Path.GetFileName(p));
        Console.WriteLine(Path.GetFileNameWithoutExtension(p));
        Console.WriteLine(Path.HasExtension(p));
        Console.WriteLine(Path.GetExtension(p));
        Console.WriteLine(Path.GetDirectoryName(p));
    }

代码执行结果如下图所示。

enter image description here

本例中,我们使用了Path类中的几个静态方法,它们是:

  • GetFileName()方法,获取文件名。
  • GetFileNameWithoutExtension()方法,获取文件名,但不包括扩展名。
  • HasExtension()方法,判断是否有扩展名。
  • GetExtension()方法,返回扩展名。
  • GetDirectoryName()方法,返回路径中所包含的目录名称。

目录

处理目录时,可以关注Directory类和DirectoryInfo类,它们区别在于,Directory类主要定义了一些静态方法,而DirectoryInfo类则需要实例化以后使用;如下面的代码,分别使用Directory类和DirectoryInfo类判断C:\temp目录是否存在。

    static void Main(string[] args)
    {
        string p = @"C:\temp";
        //
        Console.WriteLine(Directory.Exists(p));
        //
        DirectoryInfo dir = new DirectoryInfo(p);
        Console.WriteLine(dir.Exists);
    }

如果C:\temp目录存在,会显示两处True,否则显示两个False。通过本例,大家应该可以看到使用Directory类和DirectoryInfo类的区别;实际应用中,一些基本的操作,使用Directory类的静态方法的代码更少。

下面,我再了解一些Directory类中常用的方法,如:

  • GetDirectories()方法,返回子目录列表,返回类型为string[],即字符串数组类型。
  • GetFiles()方法,返回目录中中的文件列表,返回类型同样为string[]。
  • CreateDirectory()方法,创建目录。
  • Delete()方法,删除目录。
  • Move()方法,移动目录或修改目录名称。

DirectoryInfo类也包含类似的实例方法,但有些也会稍有区别,如Move()方法的功能在DirectoryInfo类使用MoveTo()方法;下面的代码,用于返回目录名称。

    static void Main(string[] args)
    {
        string p = @"C:\temp";
        DirectoryInfo dir = new DirectoryInfo(p);
        Console.WriteLine(dir.FullName);
        Console.WriteLine(dir.Name);
    }

本例中,使用FullName属性获取目录的完成路径,而Name属性获取不包含路径的目录名称,代码执行结果如下图所示。

enter image description here

文件

这里,我们主要了解一下File类和FileInfo类,相信大家也能猜出来了,它们与Directory和DirectoryInfo类的关系差不多,File类定义了一系列文件操作的静态成员,而FileInfo类则用于操作具体文件的实例(对象)。

接下来,我们看一下文本文件的快速操作方法。下面的代码,会将一些文本内容写到C:\test.txt文件,然后读取并显示。

    static void Main(string[] args)
    {
        string p = @"D:\test.txt";
        //
        string[] contents = { "第一行","第二行","line 3","line 4"};
        File.WriteAllLines(p, contents);
        //
        string[] ss = File.ReadAllLines(p);
        foreach(string s in ss)
        {
            Console.WriteLine(s);
        }
    }

代码执行结果如下图所示。

enter image description here

除了读写多行文本的方法,File类中还有一些常用的文件操方法可以使用,如ReadAllText()和WriteAllText()方法还可以读写文件的全部文本内容,ReadAllBytes()和WriteAllBytes()方法可以读写文件的全部字节;此外,System.IO命名空间中定义了大量的文件操作资源,如文件属性、文件字节操作等,大家可以参考MSDN文档使用。

CHY软件小屋原创作品!