21.4 实例:读取目录下指定类型的文件的内容

来源:互联网 发布:中国国际形势印度知乎 编辑:程序博客网 时间:2024/06/06 18:00

21.4  实例:读取目录下指定类型的文件的内容

【实例21-1】 实现了读取指定目录下的、指定文件类型的、所有文件的内容,并在控制台中显示读取的内容。具体实现步骤如下:

(1)打开Visual Studio 2008集成开发环境,并创建名称为"Sample_21"的控制台应用程序。该应用程序的版本为.NET Framework 3.5。

(2)右击"解决资源方案管理器"面板中的Program.cs节点,打开名称为"Program.cs"的类文件,并在该文件中添加ReaderFile (string path) 方法的程序代码。ReaderFile (string path)方法读取指定文件(由path参数指定)的内容,并返回读取的内容。具体步骤如下:

① 创建类型为string的fileData变量,用来保存读取的内容。

② 在try语句中读取文件的内容。

③ 创建读取文件内容的StreamReader类的实例reader,并指定该实例的编码方式为操作系统的默认编码方式。

④ 调用ReadToEnd()方法从头至尾读取文件的所有内容,并保存为fileData变量。

⑤ 关闭reader实例。

⑥ 如果try语句发生异常,则在catch语句中抛出异常。

综合上述,ReaderFile(string path)方法的程序代码如下。

  1. /// <summary> 读取文件的内容 </summary>  
  2. public static string ReaderFile(string path)  
  3. {  
  4.     string fileData = string.Empty;  
  5.     try 
  6.     {   ///读取文件的内容  
  7.         StreamReader reader = new   
  8.         StreamReader(path,Encoding.Default);  
  9.         fileData = reader.ReadToEnd();  
  10.         reader.Close();  
  11.     }  
  12.     catch(ExceptI/On ex){throw new ExceptI  
  13.     /On(ex.Message,ex);}  ///抛出异常  
  14.     return fileData;  

(3)在Program.cs文件中添加ReaderSubDirectory(string path,string filter,ref StringBuilder content)方法的程序代码。该方法读取指定目录(由path参数指定)下的、满足过滤器(filter参数指定)的所有文件的内容,读取的内容都保存到content参数(该参数为引用参数)中。具体步骤如下:

① 判断path参数是否合法。如果不合法,则中止该方法。

② 创建目录信息的实例parentDi。

③ 使用foreach语句和GetFiles()方法搜索parentDi实例指定目录下的、满足过滤器(filter参数指定)的所有文件。

④ 如果foreach语句找到文件,则依次读取每一个文件的内容,并保存到content参数中。

综合上述,ReaderSubDirectory(string path,string filter,ref StringBuilder content)方法的程序代码如下:

  1. /// <summary> 读取子目录下的所有文件的内容 </summary>  
  2. private static void ReaderSubDirectory(string path,string filter,ref   
  3. StringBuilder content)  
  4. {   ///判断目录是否正确  
  5.     if(string.IsNullOrEmpty(path) == truereturn;  
  6.     ///创建目录信息的实例  
  7.     DirectoryInfo parentDI = new DirectoryInfo(path);  
  8.     ///读取当前目录及其子目录下的指定文件的内容,  
  9.     都保存到content变量中  
  10.     foreach(FileInfo fi in parentDI.  
  11.     GetFiles(filter,SearchOptI/On.AllDirectories))  
  12.     {  
  13.         content.AppendLine();  
  14.         content.Append(ReaderFile(fi.FullName));  
  15.         content.AppendLine();  
  16.     }  

(4)在Program.cs文件中添加ReaderDirectory(string path,string filter)方法的程序代码。该方法读取指定目录(由path参数指定)下的、满足过滤器(filter参数指定)的所有文件的内容,并返回读取的内容。具体步骤如下:

① 判断path参数是否合法。如果不合法,则中止该方法。

② 创建保存读取的内容的StringBuilder类的实例content。

③ 如果filter参数为空,则直接调用ReaderSubDirectory(string path,string filter,ref StringBuilder content)方法读取path参数指定目录(及其子目录)下的所有文件的内容。

④ 如果filter参数不为空,则首先将过滤器转换为一个字符串数组filters,然后使用foreach语句处理filters数组中每一个类型的文件,并读取path目录(及其子目录)下的、满足过滤器的所有文件的内容。

⑤ 上述读取文件的内容,都保存在content变量中。最后,将该变量转换为一个字符串,并返回该字符串。

综合上述,ReaderDirectory(string path,string filter)方法的程序代码如下:

  1. /// <summary> 读取指定目录下的所有文件 </summary>  
  2. public static string ReaderDirectory(string path,string filter)  
  3. {   ///判断目录是否正确  
  4.     if(string.IsNullOrEmpty(path) == truereturn string.Empty;  
  5.     StringBuilder content = new StringBuilder();              
  6.     ///保存读取的内容  
  7.     ///如果过滤器(filter)为空,则默认读取所有文件的内容  
  8.     if(string.IsNullOrEmpty(filter) == true)  
  9.     {  
  10.         ReaderSubDirectory(path,filter,ref content);  
  11.     }  
  12.     else 
  13.     {   ///如果过滤器(filter)不为空,则获取被读取的文件  
  14.     string[] filters = filter.Split(new char[] { '|' },  
  15.     StringSplitOptI/Ons.RemoveEmptyEntries);  
  16.         ///读取每一个文件的内容  
  17. foreach(string fi in filters){ReaderSubDirectory(path,fi,ref   
  18.         content);}  
  19.     }  
  20.     return content.ToString();  

(5)在Program.cs文件的Main(string[] args)方法中调用ReaderDirectory(string path,string filter)方法读取"C:\data"目录下的、后缀名为.cs的所有文件的内容,并显示在控制台中。程序代码如下:

  1. static void Main(string[] args)  
  2. {   ///读取"C:\data"目录下的所有的以",cs"结尾文件的内容,  
  3. 并显示  
  4.     Console.WriteLine(ReaderDirectory(@"C:\data","*.cs"));  
  5.     Console.Read();  

(6)在Visual Studio 2008集成开发环境按下F5键,运行Sample_21应用程序。控制台显示的部分结果如下:

  1. using System;  
  2. using System.CollectI/Ons;  
  3. using System.Text;  
  4. using System.I/O;  
  5. using System.Windows.Forms;  
  6.  
  7. namespace Dorient.FileParse.Component  
  8. {  
  9.         public class File  
  10.         {  
  11. …  
  12.  ///写入文件  
  13. StreamWriter writer = new StreamWriter(path,false,  
  14. Encoding.Default);  
  15. writer.Write(content);  
  16. writer.Close();  
  17.                         }  
  18.                         catch(ExceptI/On ex)  
  19.                         {  
  20. MessageBox.Show(ex.Message,"写入文件错误");  
  21.                         }  
  22.                 }  
  23.         }  
0 0
原创粉丝点击