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#文件存储管理的一些细节。
【编辑推荐】