This article is currently in the process of being translated into Chinese (~84% done).
Manipulating files and directories
上一章介绍了简单文件的读写操作。使用了File类,但还做了很多读写之外的操作。如果与Directory类结合,就可以做几乎所有的文件系统操作了,如重命名文件,移动文件,删除文件等。
本章提供大量的以上操作的示例。其中只有少量的讲解,因为所用方法都很简单易用。请记住两点:首先,确保已经引入了System.IO名空间,象这样:
using System.IO;
其次,要注意在这些示例中没有做任何异常处理。程序在使用文件和目录前会检查其是否存在,但没有异常处理,因此一旦出错,程序就会崩溃。异常处理在做IO操作时是一个通用的好习惯。更多信息,请阅读本教程的异常处理章节。
所有这些示例都只使用简单文件和目录名,即它们均存在于程序生成的可执行文件EXE所在的目录。可在项目的配置中查看EXE文件的生成位置。
删除文件
if(File.Exists("test.txt"))
{
File.Delete("test.txt");
if(File.Exists("test.txt") == false)
Console.WriteLine("File deleted...");
}
else
Console.WriteLine("File test.txt does not yet exist!");
Console.ReadKey();
删除目录
if(Directory.Exists("testdir"))
{
Directory.Delete("testdir");
if(Directory.Exists("testdir") == false)
Console.WriteLine("Directory deleted...");
}
else
Console.WriteLine("Directory testdir does not yet exist!");
Console.ReadKey();
如果testdir目录不为空,此操作就会产生异常。为什么呢?因为Directory类的此版本Delete()方法只能操作空目录。不过这很容易解决:
Directory.Delete("testdir", true);
额外的参数使Delete()方法进行递归调用,表示在删除目录前,此方法会遍历其所有子目录并删除其中文件。
重命名文件
if(File.Exists("test.txt"))
{
Console.WriteLine("Please enter a new name for this file:");
string newFilename = Console.ReadLine();
if(newFilename != String.Empty)
{
File.Move("test.txt", newFilename);
if(File.Exists(newFilename))
{
Console.WriteLine("The file was renamed to " + newFilename);
Console.ReadKey();
}
}
}
注意此处使用Move()方法来重命名文件。为什么不使用Rename()方法呢?因为根本没有这个方法,而移动和改名在这里根本就是同一件事。
重命名目录
对目录做同样的操作也同样的简单:
if(Directory.Exists("testdir"))
{
Console.WriteLine("Please enter a new name for this directory:");
string newDirName = Console.ReadLine();
if(newDirName != String.Empty)
{
Directory.Move("testdir", newDirName);
if(Directory.Exists(newDirName))
{
Console.WriteLine("The directory was renamed to " + newDirName);
Console.ReadKey();
}
}
}
新建目录
新建一个全新的目录也很简单 - 只需使用Directory类的CreateDirectory()方法,如下例所示:
Console.WriteLine("Please enter a name for the new directory:");
string newDirName = Console.ReadLine();
if(newDirName != String.Empty)
{
Directory.CreateDirectory(newDirName);
if(Directory.Exists(newDirName))
{
Console.WriteLine("The directory was created!");
Console.ReadKey();
}
}
读写文件
最后一个例子展示如何使用File类很容易地读取和写入文件。在C#中有很多方法可以做这些操作,但File类的Read*和Write*方法可能是最简单的方法。它们分别有三个版本:WriteAllBytes(), WriteAllLines()和WriteAllText(),及其对应的Read方法。最简单的是最后一个,其接收一个简单的字符串输入。以下用一个简单的示例演示其使用方法:
string fileContents = "John Doe & Jane Doe sitting in a tree...";
File.WriteAllText("test.txt", fileContents);
string fileContentsFromFile = File.ReadAllText("test.txt");
Console.WriteLine(fileContentsFromFile);
看这里用于实现往一个文件中写入和读回内容所用的代码行数多么的少!两个方法的第一个参数都是文本内容所要写入和读回的路径。通常此处应该指定一个全路径名,但为了突出本示例的目的,此处只指定了一个文件名,这使文件被写入EXE文件所在的目录。
总结
综上所述,File和Directory类为做文件和目录操作提供了巨大的帮助。它们可以满足大多数的操作需求,如果还需要更高级的东西,这些类及其方法通常可作为扩展功能的基础模块。