C#文件存储管理:目录管理

.Net框架结构在名字空间System.IO中为我们提供了Directory类来进行目录管理。利用它,我们可以完成对目录及其子目录进行创建、移动、浏览等操作,甚至还可以定义隐藏目录和只读目录。
Directory的构造函数形式如下:
- public Directory(string path);
 
其中的参数path表示目录所在的路径。
Directory的主要属性有:
●Attributes:0x01表示只读,0x02表示隐藏。
●Name:当前路径名。
●Parent:上一级父目录名。
●Root:所在根目录名。
●Creation Time:目录创建时间。
●LastAccessTime:上一次访问目录的时间。
●LastWriteTime:上一次修改目录的时间。
我们常用到的Directory类的一些成员方法有:
●CreateDirectory(string path):创建子目录。
●CreateDirectories(string path):创建多级子目录。
●CreateFile(string filename):在当前目录下创建一个新文件。
●Delete():删除目录。
下面的例子中,我们利用Directory的CreateDirectory和CreateDirectories方法创建一级和二级目录。
程序清单17-1:
- usingSystem;
 - usingSystem.IO;
 - classDirectoryTest
 - {
 - publicstaticvoidMain()
 - {
 - Directoryd=newDirectory("c:\\C#");
 - Directoryd1;
 - Directoryd2;
 - try{
 - d1=d.CreateSubdirectory("file1");
 - }
 - catch(IOExceptione)
 - {
 - Console.WriteLine("
 - directoryfile1failedbecause:{0}",e);
 - return;
 - }
 - try{
 - d2=d.CreateSubdirectories("
 - file1\\file2");
 - //等于d2=d1.CreateSubDirectory("
 - file2");
 - }
 - catch(IOExceptione)
 - {
 - Console.WriteLine("
 - directoryfile2failedbecause:{0}",e);
 - return;
 - }
 - Console.WriteLine("
 - Createdirectorysuccessfully!");
 - }
 - }
 
上面例子中的异常IOException表示准备创建的目录名已经存在。System.IO中提供了各种输入输出的异常,便于我们了解任务失败的原因所在,或者是给程序的用户提示信息。
同样我们可以进行目录删除操作。
程序清单17-2:
- usingSystem;
 - usingSystem.IO;
 - classDirectoryTest
 - {
 - publicstaticvoidMain()
 - {
 - Directoryd=newDirectory("
 - c:\\C#file1");
 - Directory[]subdir;
 - try{
 - subdir=d.GetDirectories();
 - }
 - catch(DirectoryNotFoundExceptione)
 - {
 - Console.WriteLine("
 - Cannotfindsuchadirectorybecause:{0}",e);
 - return;
 - }
 - foreach(Directorydirinsubdir){
 - dir.Delete();
 - }
 - d.Delete();
 - Console.WriteLine("
 - Deletesuccessfully!");
 - }
 - }
 
#p#
C#文件存储管理:文件管理
File类通常和FileStream类协作来完成对文件的创建、删除、拷贝、移动、打开等操作。
File类的构造函数形式为:
- public File(string fileName);
 
同样,File类也有自己的属性,如绝对路径名DerictoryName、创建时间CreationTime、上次访问时间LastAccessTime、上次修改时间LastWriteTime、文件长度Length等。
File类为我们提供的方法主要有CopyTo、MoveTo、Delete等,利用它们可以完成一些基本的文件管理。
下面给出的例子用于简单的文件拷贝。这是一个带命令行参数的可执行文件,第一个参数表示源文件的绝对路径名,第二个参数表示目标文件的绝对路径名。
程序清单17-3:
- usingSystem;
 - usingSystem.IO;
 - classFileTest
 - {
 - publicstaticvoidMain(String[]args)
 - {
 - //验证参数输入是否正确
 - stringsourcename;
 - stringtargetname;
 - try{
 - sourcename=args[0];
 - }
 - catch
 - {
 - Console.WriteLine("
 - Pleaseinputthenameofthesourcefilecorrectly");
 - return;
 - }
 - try{
 - targetname=args[1];
 - }
 - catch
 - {
 - Console.WriteLine("
 - Pleaseinputthenameofthetargetfilecorrectly");
 - return;
 - }
 - //进行文件拷贝操作
 - Filefile;
 - try{
 - file=newFile(sourcename);
 - }
 - catch
 - {
 - Console.WriteLine("
 - Cannotopenthesourcefilenamed'{0}'",
 - sourcename);
 - return;
 - }
 - try{
 - file.CopyTo(targetname,true);
 - }
 - catch
 - {
 - Console.WriteLine("
 - Canwritethetargetfilenamed'{0}'",targetname);
 - return;
 - }
 - Console.WriteLine("
 - Filecopyssuccessfully!");
 - }
 - }
 
上面我们用到了File的CopyTo方法。若改为MoveTo方法,则程序可以用于文件的移动操作。
下面的例子用于删除当前目录下的所有文件。
程序清单17-4:
- usingSystem;
 - usingSystem.IO;
 - classFileTest
 - {
 - publicstaticvoidMain()
 - {
 - Console.WriteLine("
 - Areyousuretodeleteallthe
 - filesincurrentdirectory?");
 - Console.WriteLine("
 - Press'Y'thenentertocontinue,
 - anyotherkeytoabort");
 - inta=Console.Read();
 - if(a=='Y'||a=='y'){
 - Console.WriteLine("Deletingthefiles...");
 - }
 - else{
 - Console.WriteLine("canceledbyuser");
 - return;
 - }
 - Directorydir=newDirectory(".");
 - foreach(Filefindir.GetFiles()){
 - f.Delete();
 - }
 - }
 - }
 
其中,语句foreach(File f in dir.GetFiles())表示查找当前所有文件。Directory类的成员方法GetFiles有两种重载形式:
- public File[] GetFiles();
 - public File[] GetFiles(string searchCriteria);
 
后面一种方法中的参数表示搜索文件的条件。我们对程序17-4可以稍做改动,把最后一段代码改写为:
- foreach(File f in dir.GetFiles("*.exe")){
 - f.Delete();
 - }
 
这样,程序实际上是变成了删除当前目录下的所有扩展名为.exe的文件。
值得一提的是,作者在使用File.Delete方法时遇到了一个有趣的现象。文件删除后,在Windows的回收站中找不到,但是使用工具软件Norton Unerase Wizard却成功地找到并恢复了被删除了的文件,而且文件名还保存完好(Windows彻底删除的文件恢复时文件名的第一个字符已被删除)。看来File.Delete方法也并不是彻底地抹去文件的内容,而只是对被删除的文件作出某个标记而已。
以上就介绍了C#文件存储管理的一些细节。
【编辑推荐】