关于C#文件存储管理:Directory类和File类

开发 后端
关于C#的文件存储管理作者在使用File.Delete方法时遇到了一个有趣的现象。File.Delete方法也并不是彻底地抹去文件的内容,而只是对被删除的文件作出某个标记而已。

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. }  

#p#

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#文件存储管理的一些细节。

【编辑推荐】

  1. C#删除指定文件两种方法
  2. C# 进度条效果实现实例
  3. C# 枚举简介及优点浅析
  4. C# 枚举实例应用浅析
  5. C# 枚举常用方法浅析
责任编辑:冰荷 来源: bianceng
相关推荐

2009-08-10 10:04:25

C#抽象类C#接口

2009-08-27 13:37:11

C#类和结构

2009-08-27 16:18:47

C#类C#结构体

2010-01-15 18:35:25

C++的类

2009-09-07 14:29:52

C# ServiceC

2009-08-21 17:24:06

C# SingleIn

2009-08-06 14:43:10

C# Calculat

2009-08-03 18:12:31

C#抽象类

2009-09-03 10:42:16

C# Employee

2009-08-12 09:41:28

C# Director

2009-08-26 17:05:23

C# ThreadPo

2009-08-21 17:24:06

C# SingleIn

2009-09-03 15:57:11

C# SystemMe

2009-08-31 15:13:46

C# CWorker类

2009-08-28 14:09:19

C#静态类

2009-08-10 10:37:17

C#类与结构

2009-08-13 14:06:37

C#结构体结构体和类的区别

2012-12-26 09:31:44

C#Winform

2009-08-04 17:08:12

C# Thread类

2009-08-13 13:31:13

锁定对象C# Monitor类
点赞
收藏

51CTO技术栈公众号