26.1.2 FileInfo和DirectoryInfo

FileInfo和DirectoryInfo代表某一个具体的文件或目录,它们都派生自抽象类FileSystemInfo,因此不能被实例化。FileSystemInfo提供了文件和目录都需要的一些主要功能——提供对文件和目录的共同操作。因为FileSystemInfo类是FileInfo和DirectoryInfo的共同基类,因此FileSystemInfo类既可以表示文件,也可以表示目录。FileSystemInfo类提供的主要成员如表26-1所示。

26.1.2 FileInfo和DirectoryInfo - 图1

这些成员都被FileInfo和DirectoryInfo类所继承。

代码清单26-2 FileInfo代码示例


FileInfo fi=new FileInfo(@"c:\iosample\mytext.txt");

if(fi.Exists)

{

Console.WriteLine("Name:\t\t{0}",fi.Name);

Console.WriteLine("CreationTime:\t{0}",fi.CreationTime);

Console.WriteLine("Directory:\t{0}",fi.Directory);

Console.WriteLine("DirectoryName:\t{0}",fi.DirectoryName);

Console.WriteLine("Extension:\t{0}",fi.Extension);

Console.WriteLine("FullName:\t{0}",fi.FullName);

Console.WriteLine("LastAccessTime:\t{0}",fi.LastAccessTime);

Console.WriteLine("LastWriteTime:\t{0}",fi.LastWriteTime);

}


上述代码的运行结果为:


Name:mytext.txt

CreationTime:2010-5-29 13:38:16

Directory:c:\iosample

DirectoryName:c:\iosample

Extension:.txt

FullName:c:\iosample\mytext.txt

LastAccessTime:2010-5-29 18:01:41

LastWriteTime:2010-5-29 13:38:16


代码清单26-3 是使用FileInfo和DirectoryInfo把代码清单26-1改写后的结果,注意观察两者之间的区别。

代码清单26-3 使用FileInfo和DirectoryInfo创建文件和目录


using System;

using System.IO;

namespace ProgrammingCSharp4

{

class IOSample

{

public static void Main()

{

//声明文件流

FileStream fs=null;

//声明流读写器

StreamWriter writer=null;

try

{

//操作的目录

string dirPath=@"c:\iosample";

//操作的文件

string filePath=string.Format(@"{0}{1}",dirPath,"mytext.txt");

//声明并使用目录路径实例化一个DirectoryInfo对象

DirectoryInfo di=new DirectoryInfo(dirPath);

if(!di.Exists)//如果目录不存在

{

di.Create();//创建这个目录

Console.WriteLine(@“创建一个目录:c:\iosample”);

}

else

{

//提示目录已存在

Console.WriteLine(@“目录:c:\iosample已存在”);

}

//使用Name属性输出目录名

Console.WriteLine(“目录名:{0}”,di.Name);

//声明并实例化一个FileInfo对象

FileInfo fi=new FileInfo(filePath);

if(!fi.Exists)

{

//文件不存在,创建之

fs=fi.Create();

Console.WriteLine(“新建一个文件:{0}”,filePath);

}

else

{

//文件存在,打开之

fs=fi.Open(FileMode.Open);

Console.WriteLine(“文件:{0}已存在,打开它”,filePath);

}

//实例化流读写器,用于写入文本数据到文件流

writer=new StreamWriter(fs);

//定位到文件的末尾,即从末尾开始写入数据

fs.Seek(0,SeekOrigin.End);

//使用当前时间作为内容

string newContent=DateTime.Now.ToString();

//写入流,即写入文件

writer.WriteLine(newContent);

Console.WriteLine(“向文件中写入数据:{0}”,newContent);

//使用FileInfo的属性来输出文件的各种属性数据

Console.WriteLine("Name:\t\t{0}",fi.Name);

Console.WriteLine("CreationTime:\t{0}",fi.CreationTime);

Console.WriteLine("Directory:\t{0}",fi.Directory);

Console.WriteLine("DirectoryName:\t{0}",fi.DirectoryName);

Console.WriteLine("Extension:\t{0}",fi.Extension);

Console.WriteLine("FullName:\t{0}",fi.FullName);

Console.WriteLine("LastAccessTime:\t{0}",fi.LastAccessTime);

Console.WriteLine("LastWriteTime:\t{0}",fi.LastWriteTime);

}

finally

{

writer.Close();

fs.Close();

Console.WriteLine(“关闭数据流……”);

}

}

}

}


上述代码运行的结果是:


创建一个目录:c:\iosample

目录名:iosample

新建一个文件:c:\iosample\mytext.txt

向文件中写入数据:2010-6-2 18:49:22

Name:mytext.txt

CreationTime:1601-1-1 8:00:00

Directory:c:\iosample

DirectoryName:c:\iosample

Extension:.txt

FullName:c:\iosample\mytext.txt

LastAccessTime:1601-1-1 8:00:00

LastWriteTime:1601-1-1 8:00:00

关闭数据流……

请按任意键继续……