一 两者的共同点
都用于典型的操作,如复制、移动、重命名、创建、打开、删除和追加到文件
默认情况下,将向所有用户授予对新文件的完全读写访问权限。
二 两者的区别
File类是静态类,由于所有的File方法都是静态的,所以如果只想执行一个操作,那么使用File方法的效率比使用相应的FileInfo实例方法可能更高。
所有的File方法都要求当前所操作的文件的路径。File类的静态方法对所有方法都执行安全检查。如果打算多次重用某个对象,可考虑改用FileInfo 的相应实例方法,因为并不总是需要安全检查。
file,directory可以控制多个文件所以进行每次安全检查,而FileInfo,DirectoryInfo只能控制一个文件信息只进行一次安全处理。
filesysteminfo提供fileinfo和directoryinfo的共有方法,实现对文件或目录进行操作,当不确定操作的对象是文件还是目录时使用filesysteminfo就会很方便。
静态方法每次对文件进行操作过程是:静态方法存在于栈头,它是由类调用,然后寻找需要操作的文件。寻找需要操作文件的过程是个IO过程,耗时比较长。但它不必要到堆区去遍历实例化新对象。普通方法是由当时的对象调用,需要创建对象,new一个,(静态方法不需要此过程)但如果操作次数多的话,普通方法就不需要再次去执行不必要而且耗时的 IO操作,就能整体提速!
所以执行方法的次数也就能决定了使用哪个类的最佳选择。
三 Directory类常用的方法如下:
CreateDirectory:按指定路径创建所有文件夹和子文件夹。
Delete:删除指定文件夹。
Exists:检查指定路径的文件夹是否存在,存在,返回true。
GetCreationTime:返回指定文件或文件夹的创建日期和时间。
GetCurrentDirectory:获取应用程序的当前工作文件夹。
GetDirectories:获取指定文件夹中子文件夹的名称。
GetDirectoryRoot:返回指定路径的卷信息、根信息或两者同时返回。
GetFiles:返回指定文件夹中子文件的名称。
GetFileSystemEntries:返回指定文件夹中所有文件和子文件的名称。
GetLastAccessTime:返回上次访问指定文件或文件夹的创建日期和时间。
GetLastWriteTime:返回上次写入指定文件或文件夹的创建日期和时间。
GetLogicalDrives:检索计算机中的所有驱动器,例如A:、C:等等。
GetParent:获取指定路径的父文件夹,包括绝对路径和相对路径。
Move:将指定文件或文件夹及其内容移动到新位置。
SetCreationTime:设置指定文件或文件夹的创建日期和时间。
SetCurrentDirectory:将应用程序的当前工作文件夹设置指定文件夹。
SetLastAccessTime:设置上次访问指定文件或文件夹的日期和时间。
SetLastWriteTime:设置上次写入指定文件夹的日期和时间。
四目录创建方法:Directory.CreateDirectory
方法声明如下:public static DirectoryInfo CreateDirectory(string path);下面的代码演示在c:Dir1文件夹下创建名为Dir2子文件夹。
Directory.CreateDirectory(@"c:Dir1Dir2");
五目录属性设置方法:DirectoryInfo.Atttributes
下面的代码设置c:Dir1Dir2目录为只读、隐藏。与文件属性相同,目录属性也是使用FileAttributes来进行设置的。
DirectoryInfo DirInfo=new DirectoryInfo(@"c:Dir1Dir2");
DirInfo.Atttributes=FileAttributes.ReadOnly|FileAttributes.Hidden;
六目录删除方法:Directory.Delete
该方法声明如下:public static void Delete(string path,bool recursive);下面的代码可以将c:Dir1Dir2目录删除。Delete方法的第二个参数为bool类型,它可以决定是否删除非空目录。如果该参数值为true,将删除整个目录,即使该目录下有文件或子目录;若为false,则仅当目录为空时才可删除。
Directory.Delete(@"c:Dir1Dir2",true);
七目录移动方法:Directory.Move
该方法声明如下:public static void Move(string sourceDirName,string destDirName);下面的代码将目录c:Dir1Dir2移动到c:Dir3Dir4。
File.Move(@"c:Dir1Dir2",@"c:Dir3Dir4");}
八获取当前目录下所有子目录:Directory.GetDirectories
该方法声明如下:public static string[] GetDirectories(string path;);下面的代码读出c:Dir1目录下的所有子目录,并将其存储到字符串数组中。
string [] Directorys;
Directorys = Directory. GetDirectories (@"c:Dir1");
获得所有逻辑盘符:
string[] AllDrivers=Directory.GetLogicalDrives();
九获取当前目录下的所有文件方法:Directory.GetFiles
该方法声明如下:public static string[] GetFiles(string path;);下面的代码读出c:Dir1目录下的所有文件,并将其存储到字符串数组中。
string [] Files;
Files = Directory. GetFiles (@"c:Dir1",);
十判断目录是否存在方法:Directory.Exist
该方法声明如下:public static bool Exists(string path;);下面的代码判断是否存在c:Dir1Dir2目录。
if(File.Exists(@"c:Dir1Dir2"))//判断目录是否存在
{…}//处理语句
注意:路径有3种方式,当前目录下的相对路径、当前工作盘的相对路径、绝对路径。以C:dir1dir2为例(假定当前工作目录为C:Tmp)。“dir2”,“dir1dir2”,“C:dir1dir2”都表示C: dir1dir2。另外,在C#中 “”是特殊字符,要表示它的话需要使用“\”。由于这种写法不方便,C#语言提供了@对其简化。只要在字符串前加上@即可直接使用“”。所以上面的路径在C#中应该表示为”dir2”,@”dir1dir2”,@”C:dir1dir2”。