C#文件管理

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

    .Net框架结构在名字空间System.IO中为我们提供了Directory类来进行目录管理。利用它,我们可以完成对目录及其子目录进行创建、移动、浏览等操作,甚至还可以定义隐藏目录和只读目录。

    Directory的构造函数形式如下:

 
 
  1. 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:

 
 
  1. usingSystem;  
  2. usingSystem.IO;  
  3. classDirectoryTest  
  4. {  
  5. publicstaticvoidMain()  
  6. {  
  7. Directoryd=newDirectory("c://C#");  
  8. Directoryd1;  
  9. Directoryd2;  
  10. try{  
  11. d1=d.CreateSubdirectory("file1");  
  12. }  
  13. catch(IOExceptione)  
  14. {  
  15. Console.WriteLine("  
  16. directoryfile1failedbecause:{0}",e);  
  17. return;  
  18. }  
  19. try{  
  20. d2=d.CreateSubdirectories("  
  21. file1//file2");  
  22. //等于d2=d1.CreateSubDirectory("  
  23. file2");  
  24. }  
  25. catch(IOExceptione)  
  26. {  
  27. Console.WriteLine("  
  28. directoryfile2failedbecause:{0}",e);  
  29. return;  
  30. }  
  31. Console.WriteLine("  
  32. Createdirectorysuccessfully!");  
  33. }  

    上面例子中的异常IOException表示准备创建的目录名已经存在。System.IO中提供了各种输入输出的异常,便于我们了解任务失败的原因所在,或者是给程序的用户提示信息。

    同样我们可以进行目录删除操作。

程序清单17-2:

  1. usingSystem;  
  2. usingSystem.IO;  
  3. classDirectoryTest  
  4. {  
  5. publicstaticvoidMain()  
  6. {  
  7. Directoryd=newDirectory("  
  8. c://C#file1");  
  9. Directory[]subdir;  
  10. try{  
  11. subdir=d.GetDirectories();  
  12. }  
  13. catch(DirectoryNotFoundExceptione)  
  14. {  
  15. Console.WriteLine("  
  16. Cannotfindsuchadirectorybecause:{0}",e);  
  17. return;  
  18. }  
  19. foreach(Directorydirinsubdir){  
  20. dir.Delete();  
  21. }  
  22. d.Delete();  
  23. Console.WriteLine("  
  24. Deletesuccessfully!");  
  25. }  

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

    File类通常和FileStream类协作来完成对文件的创建、删除、拷贝、移动、打开等操作。

    File类的构造函数形式为:

 
 
  1. public File(string fileName); 

    同样,File类也有自己的属性,如绝对路径名DerictoryName、创建时间CreationTime、上次访问时间LastAccessTime、上次修改时间LastWriteTime、文件长度Length等。

    File类为我们提供的方法主要有CopyTo、MoveTo、Delete等,利用它们可以完成一些基本的文件管理。

    下面给出的例子用于简单的文件拷贝。这是一个带命令行参数的可执行文件,第一个参数表示源文件的绝对路径名,第二个参数表示目标文件的绝对路径名。

    程序清单17-3:

 
 
  1. usingSystem;  
  2. usingSystem.IO;  
  3. classFileTest  
  4. {  
  5. publicstaticvoidMain(String[]args)  
  6. {  
  7. //验证参数输入是否正确  
  8. stringsourcename;  
  9. stringtargetname;  
  10. try{  
  11. sourcename=args[0];  
  12. }  
  13. catch 
  14. {  
  15. Console.WriteLine("  
  16. Pleaseinputthenameofthesourcefilecorrectly");  
  17. return;  
  18. }  
  19. try{  
  20. targetname=args[1];  
  21. }  
  22. catch 
  23. {  
  24. Console.WriteLine("  
  25. Pleaseinputthenameofthetargetfilecorrectly");  
  26. return;  
  27. }  
  28. //进行文件拷贝操作  
  29. Filefile;  
  30. try{  
  31. file=newFile(sourcename);  
  32. }  
  33. catch 
  34. {  
  35. Console.WriteLine("  
  36. Cannotopenthesourcefilenamed'{0}'",  
  37. sourcename);  
  38. return;  
  39. }  
  40. try{  
  41. file.CopyTo(targetname,true);  
  42. }  
  43. catch 
  44. {  
  45. Console.WriteLine("  
  46. Canwritethetargetfilenamed'{0}'",targetname);  
  47. return;  
  48. }  
  49. Console.WriteLine("  
  50. Filecopyssuccessfully!");  
  51. }  

    上面我们用到了File的CopyTo方法。若改为MoveTo方法,则程序可以用于文件的移动操作。

    下面的例子用于删除当前目录下的所有文件。

    程序清单17-4:

 
 
  1. usingSystem;  
  2. usingSystem.IO;  
  3. classFileTest  
  4. {  
  5. publicstaticvoidMain()  
  6. {  
  7. Console.WriteLine("  
  8. Areyousuretodeleteallthe  
  9. filesincurrentdirectory?");  
  10. Console.WriteLine("  
  11. Press'Y'thenentertocontinue,  
  12. anyotherkeytoabort");  
  13. inta=Console.Read();  
  14. if(a=='Y'||a=='y'){  
  15. Console.WriteLine("Deletingthefiles...");  
  16. }  
  17. else{  
  18. Console.WriteLine("canceledbyuser");  
  19. return;  
  20. }  
  21. Directorydir=newDirectory(".");  
  22. foreach(Filefindir.GetFiles()){  
  23. f.Delete();  
  24. }  
  25. }  

    其中,语句foreach(File f in dir.GetFiles())表示查找当前所有文件。Directory类的成员方法GetFiles有两种重载形式:

 
 
  1. public File[] GetFiles();  
  2. public File[] GetFiles(string searchCriteria);  

    后面一种方法中的参数表示搜索文件的条件。我们对程序17-4可以稍做改动,把最后一段代码改写为:

 
 
  1. foreach(File f in dir.GetFiles("*.exe")){  
  2. f.Delete();  
  3. }  

    这样,程序实际上是变成了删除当前目录下的所有扩展名为.exe的文件。

    值得一提的是,作者在使用File.Delete方法时遇到了一个有趣的现象。文件删除后,在Windows的回收站中找不到,但是使用工具软件Norton Unerase Wizard却成功地找到并恢复了被删除了的文件,而且文件名还保存完好(Windows彻底删除的文件恢复时文件名的第一个字符已被删除)。看来File.Delete方法也并不是彻底地抹去文件的内容,而只是对被删除的文件作出某个标记而已。

    以上就介绍了C#文件存储管理的一些细节。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值