• C# 获取文件大小,创建时间,文件信息,FileInfo类的属性表


    C# 获取文件大小,创建时间,文件信息,FileInfo类的属性表 
     
    
    OpenFileDialog openFileDialog1 = new OpenFileDialog();
     
    if(openFileDialog1.ShowDialog() == DialogResult.OK)
    {
    openFileDialog1.FileName;
    System.IO.FileInfo file = new System.IO.FileInfo(openFileDialog1.FileName);
     
    file.Name;//文件名
    file.Length.ToString();//大小",
    file.LastAccessTime.ToString();//最后访问时间
    file.LastWriteTime.ToString();//最后修改时间
    file.DirectoryName;//路径
    }
     
    FileInfo类是一个密封类,它可以用来创建、复制、删除、移动和打开文件的实例方法。FileInfo类包括6个属性,可以用来获取文件的名称、完整路径等,具体说明如表21.9所示。
     
    表21.9 FileInfo类的属性表
     
    属 性 说 明 属 性 说 明
    Directory获取父目录
    Exists指定当前文件是否存在
    DirectoryName获取文件的完整路径
    Length获取当前文件的大小(字节)
    IsReadOnly获取或设置当前文件是否为只读
    Name获取文件的名称
    FileInfo和DirectoryInfo类一样,也包括了FileSystemInfo类继承而来的属性,在此不做详细介绍。
    除了上述属性之外,FileInfo类还包括实例方法,具体说明如表21.10所示。
    表21.10 FileInfo类的实例方法表
     
    方 法 说 明 方 法 说 明
    Create()创建文件
    OpenRead()以只读方式打开文件
    Delete()删除指定文件
    OpenWrite()以只写方式打开文件
    MoveTo()将指定文件移到新位置
    CreateText()创建写入新文本文件的StreamWriter
    CopyTo()将现有文件复制到新文件
    OpenText()打开指定文本文件,并准备从其文件中读取内容
    Replace()使用其他文件的内容替换指定文件的内容AppendText()创建一个StreamWriter,它可以想文本文件追加内容Open()打开文件
    其中,Create()、Delete()、MoveTo()、CopyTo()和Replace()方法用来操作文件,它们依次可以用来创建、删除、移动、复制和替换文件。
     
    21.3.3 创建文件
     
    创建文件可以使用File类的Create()方法或者FileInfo类的Create()方法。
     
    【示例21-18】 使用FileInfo类的Create()方法创建一个名称为"my.ini"的文件。
     
    1. FileInfo fi = new FileInfo("my.ini");
    2. fi.Create();
     
    分析:该示例首先创建FileInfo类的实例fi,它被指定为my.ini文件,然后调用Create()方法创建该文件。新创建的my.ini文件保存在应用程序所在的目录
     
    21.3.4 写入文件
     
    存在多种方法,可以将指定内容写入到文件,如File类的OpenWrite()方法、FileInfo类的OpenWrite()方法等。
     
    【示例21-19】 使用FileInfo类的OpenWrite()方法将"这是一个配置文件。"字符串写入到名称为my.ini的文件中,具体步骤如下:
     
    (1)创建FileInfo类的实例fi,它被指定为my.ini文件。
     
    (2)使用OpenWrite()方法打开my.ini文件,并保存为FileStream类的实例fsw。
     
    (3)设置被写入的内容("这是一个配置文件。"字符串),并转换为byte数组,保存为dataw。
     
    (4)调用fsw实例的Write()方法将dataw数组中的内容写入到my.ini文件。
     
    (5)调用fsw实例的Close()方法关闭fsw实例。
     
    1. FileInfo fi = new FileInfo("my.ini");
    2. ///创建FileInfo类的实例fi
    3. FileStream fsw = fi.OpenWrite();
    4. ///使用OpenWrite()方法打开my.ini文件
    5. string valuew = "这是一个配置文件。";
    6. ///设置被写入的内容
    7. byte[] dataw = System.Text.Encoding.Unicode.GetBytes(valuew);
    8. ///转换为byte数组,保存为dataw
    9. fsw.Write(dataw,0,dataw.Length);
    10. ///将dataw数组中的内容写入到my.ini文件
    11. fsw.Close();
    12. ///调用fsw实例的Close()方法关闭fsw实例
     
    分析:上述示例代码运行之后,将"这是一个配置文件。"字符串写入到名称为my.ini的文件中。以记事本的方式查看my.ini文件的内容,如 图21.2所示。
     
    主要:my.ini文件的内容已经被使用Unicode方式编码过,所以不能看到该文件的真实内容
     
    21.3.5 读取文件
     
    存在多种方法,可以从指定文件中读取内容,如File类的OpenRead()方法、FileInfo类的OpenRead()方法等。
     
    【示例21-20】 使用FileInfo类的OpenRead()方法从my.ini文件读取内容,并转换为一个字符串(保存为valuer),最终,将valuer的内容显示在控制台。具体步骤如下:
     
    (1)创建FileInfo类的实例fi,它被指定为my.ini文件。
     
    (2)使用OpenRead()方法打开my.ini文件,并保存为FileStream类的实例fsr。
     
    (3)创建datar数组,用来保存从my.ini文件读取的内容。
     
    (4)调用fsw实例的Read()方法读取my.ini文件的内容,并保存到datar数组。
     
    (5)将datar数组转换为一个字符串,并保存为valuer。
     
    (6)显示valuer的值。
     
    (7)调用fsw实例的Close()方法关闭fsw实例。
     
    1. FileInfo fi = new FileInfo("my.ini");
    2. ///创建FileInfo类的实例fi
    3. FileStream fsr = fi.OpenRead();
    4. ///使用OpenRead()方法打开my.ini文件
    5. byte[] datar = new byte[(int)fsr.Length];
    6. ///创建datar数组,保存从my.ini文件读取的内容
    7. fsr.Read(datar,0,(int)fsr.Length);
    8. ///读取my.ini文件的内容,保存到datar数组
    9. string valuer = System.Text.Encoding.Unicode.GetString(datar);
    10. ///将datar数组转换为string,保存为valuer
    11. Console.WriteLine(valuer);
    12. ///显示my.ini文件的内容
    13. fsr.Close();
    14. ///调用fsw实例的Close()方法关闭fsw实例
     
    分析:上述示例代码运行之后,将显示"这是一个配置文件。"字符串。
     
    21.3.6 移动文件
     
    移动文件可以使用以下2种方法中的任何一种。
     
    File类的Move()方法:将指定文件移到新位置。
     
    【示例21-21】 使用File类的Move()方法将my.ini文件移动为my01.ini文件。
     
    1. File.Move(@"my.ini","my01.ini");
     
    分析:上述代码执行之后,实际上是创建了名称为my01.ini的新文件,并删除了my.ini文件。
     
    FileInfo类的MoveTo()方法:将指定文件移到新位置。
     
    【示例21-22】 创建FileInfo类的实例fi(表示"my.ini"文件),并调用MoveTo()方法将my.ini文件移动为my01.ini文件。
     
    1. FileInfo fi = new FileInfo("my.ini");
    2. fi.MoveTo("my01.ini");
     
    分析:上述代码执行之后,实际上是创建了名称为my01.ini的新文件,并删除了my.ini文件。
     
    21.3.7 删除文件
     
    删除文件可以使用以下2种方法中的任何一种。
     
    File类的Delete()方法:将删除指定的文件。
     
    【示例21-23】 使用File类的Delete()方法删除my.ini文件。
     
    1. File.Delete(@"my.ini","my01.ini");
     
    FileInfo类的Delete()方法:将删除指定的文件。
     
    【示例21-24】 创建FileInfo类的实例fi(表示my.ini文件),并调用Delete()方法删除my.ini文件。
     
    1. FileInfo fi = new FileInfo("my.ini");
    2. fi.Delete("my.ini");
     
    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;
    15. }
     
    (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) == true) return;
    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. }
    17. }
     
    (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) == true) return 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();
    21. }
     
    (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. }
     
    (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. }
    24. }
     
    21.5 上 机 实 践
     
    1.代码调试
     
    在Visual Studio 2008集成开发环境中调试下列代码是否能够正常运行。如果能够正常运行,请写出运行结果。如果不能正常运行,请指出错误代码,并改正。
     
    1. namespace Test
    2. {
    3. class Program
    4. {
    5. static void Main(string[] args)
    6. {
    7. FileInfo fi = new FileInfo("my.ini");
    8. FileStream fsr = fi.OpenRead();
    9. byte[] datar = new byte[(int)fsr.Length];
    10. fsr.Read(datar,0,(int)fsr.Length);
    11. string valuer = System.Text.Encoding.Unicode.GetString(datar);
    12. Console.WriteLine(valuer);
    13. Console.Read();
    14. }
    15. }
    16. }
     
    2.编程题
     
    在Visual Studio 2008集成开发环境中创建名称为FileOperation的控制台应用程序,并在该应用程序中实现对readme.txt文件的读写操作。
    21.6 常见问题及解答
     
    问题:如何遍历一个目录下的所有目录(不包括子目录)和文件,并显示目录和文件的名称?
     
    解答:直接使用foreach语句和Directory类中的方法即可,程序代码如下。
     
    1. string path = …///被遍历的目录
    2. DirectoryInfo parentdi = new DirectoryInfo(path);
    3. ///创建path所指定目录的实例
    4. foreach(DirectoryInfo di in parentdi.GetDirectories())
    5. ///访问当前目录的子目录
    6. {
    7. Console.WriteLine(di.Name);
    8. ///显示子目录的名称
    9. }
    10. foreach(FileInfo fi in parentdi.GetFiles())
    11. ///访问当前目录的文件
    12. {
    13. Console.WriteLine(fi.Name);
    14. ///显示文件的名称
    15. }
    C# 获取文件大小,创建时间,文件信息,FileInfo类的属性表 
     
    2011-12-13 09:00:40|  分类: C# |举报|字号 订阅
    OpenFileDialog openFileDialog1 = new OpenFileDialog();
     
    if(openFileDialog1.ShowDialog() == DialogResult.OK)
    {
    openFileDialog1.FileName;
    System.IO.FileInfo file = new System.IO.FileInfo(openFileDialog1.FileName);
     
    file.Name;//文件名
    file.Length.ToString();//大小",
    file.LastAccessTime.ToString();//最后访问时间
    file.LastWriteTime.ToString();//最后修改时间
    file.DirectoryName;//路径
    }
     
    FileInfo类是一个密封类,它可以用来创建、复制、删除、移动和打开文件的实例方法。FileInfo类包括6个属性,可以用来获取文件的名称、完整路径等,具体说明如表21.9所示。
     
    表21.9 FileInfo类的属性表
     
    属 性 说 明 属 性 说 明
    Directory获取父目录
    Exists指定当前文件是否存在
    DirectoryName获取文件的完整路径
    Length获取当前文件的大小(字节)
    IsReadOnly获取或设置当前文件是否为只读
    Name获取文件的名称
    FileInfo和DirectoryInfo类一样,也包括了FileSystemInfo类继承而来的属性,在此不做详细介绍。
    除了上述属性之外,FileInfo类还包括实例方法,具体说明如表21.10所示。
    表21.10 FileInfo类的实例方法表
     
    方 法 说 明 方 法 说 明
    Create()创建文件
    OpenRead()以只读方式打开文件
    Delete()删除指定文件
    OpenWrite()以只写方式打开文件
    MoveTo()将指定文件移到新位置
    CreateText()创建写入新文本文件的StreamWriter
    CopyTo()将现有文件复制到新文件
    OpenText()打开指定文本文件,并准备从其文件中读取内容
    Replace()使用其他文件的内容替换指定文件的内容AppendText()创建一个StreamWriter,它可以想文本文件追加内容Open()打开文件
    其中,Create()、Delete()、MoveTo()、CopyTo()和Replace()方法用来操作文件,它们依次可以用来创建、删除、移动、复制和替换文件。
     
    21.3.3 创建文件
     
    创建文件可以使用File类的Create()方法或者FileInfo类的Create()方法。
     
    【示例21-18】 使用FileInfo类的Create()方法创建一个名称为"my.ini"的文件。
     
    1. FileInfo fi = new FileInfo("my.ini");
    2. fi.Create();
     
    分析:该示例首先创建FileInfo类的实例fi,它被指定为my.ini文件,然后调用Create()方法创建该文件。新创建的my.ini文件保存在应用程序所在的目录
     
    21.3.4 写入文件
     
    存在多种方法,可以将指定内容写入到文件,如File类的OpenWrite()方法、FileInfo类的OpenWrite()方法等。
     
    【示例21-19】 使用FileInfo类的OpenWrite()方法将"这是一个配置文件。"字符串写入到名称为my.ini的文件中,具体步骤如下:
     
    (1)创建FileInfo类的实例fi,它被指定为my.ini文件。
     
    (2)使用OpenWrite()方法打开my.ini文件,并保存为FileStream类的实例fsw。
     
    (3)设置被写入的内容("这是一个配置文件。"字符串),并转换为byte数组,保存为dataw。
     
    (4)调用fsw实例的Write()方法将dataw数组中的内容写入到my.ini文件。
     
    (5)调用fsw实例的Close()方法关闭fsw实例。
     
    1. FileInfo fi = new FileInfo("my.ini");
    2. ///创建FileInfo类的实例fi
    3. FileStream fsw = fi.OpenWrite();
    4. ///使用OpenWrite()方法打开my.ini文件
    5. string valuew = "这是一个配置文件。";
    6. ///设置被写入的内容
    7. byte[] dataw = System.Text.Encoding.Unicode.GetBytes(valuew);
    8. ///转换为byte数组,保存为dataw
    9. fsw.Write(dataw,0,dataw.Length);
    10. ///将dataw数组中的内容写入到my.ini文件
    11. fsw.Close();
    12. ///调用fsw实例的Close()方法关闭fsw实例
     
    分析:上述示例代码运行之后,将"这是一个配置文件。"字符串写入到名称为my.ini的文件中。以记事本的方式查看my.ini文件的内容,如 图21.2所示。
     
    主要:my.ini文件的内容已经被使用Unicode方式编码过,所以不能看到该文件的真实内容
     
    21.3.5 读取文件
     
    存在多种方法,可以从指定文件中读取内容,如File类的OpenRead()方法、FileInfo类的OpenRead()方法等。
     
    【示例21-20】 使用FileInfo类的OpenRead()方法从my.ini文件读取内容,并转换为一个字符串(保存为valuer),最终,将valuer的内容显示在控制台。具体步骤如下:
     
    (1)创建FileInfo类的实例fi,它被指定为my.ini文件。
     
    (2)使用OpenRead()方法打开my.ini文件,并保存为FileStream类的实例fsr。
     
    (3)创建datar数组,用来保存从my.ini文件读取的内容。
     
    (4)调用fsw实例的Read()方法读取my.ini文件的内容,并保存到datar数组。
     
    (5)将datar数组转换为一个字符串,并保存为valuer。
     
    (6)显示valuer的值。
     
    (7)调用fsw实例的Close()方法关闭fsw实例。
     
    1. FileInfo fi = new FileInfo("my.ini");
    2. ///创建FileInfo类的实例fi
    3. FileStream fsr = fi.OpenRead();
    4. ///使用OpenRead()方法打开my.ini文件
    5. byte[] datar = new byte[(int)fsr.Length];
    6. ///创建datar数组,保存从my.ini文件读取的内容
    7. fsr.Read(datar,0,(int)fsr.Length);
    8. ///读取my.ini文件的内容,保存到datar数组
    9. string valuer = System.Text.Encoding.Unicode.GetString(datar);
    10. ///将datar数组转换为string,保存为valuer
    11. Console.WriteLine(valuer);
    12. ///显示my.ini文件的内容
    13. fsr.Close();
    14. ///调用fsw实例的Close()方法关闭fsw实例
     
    分析:上述示例代码运行之后,将显示"这是一个配置文件。"字符串。
     
    21.3.6 移动文件
     
    移动文件可以使用以下2种方法中的任何一种。
     
    File类的Move()方法:将指定文件移到新位置。
     
    【示例21-21】 使用File类的Move()方法将my.ini文件移动为my01.ini文件。
     
    1. File.Move(@"my.ini","my01.ini");
     
    分析:上述代码执行之后,实际上是创建了名称为my01.ini的新文件,并删除了my.ini文件。
     
    FileInfo类的MoveTo()方法:将指定文件移到新位置。
     
    【示例21-22】 创建FileInfo类的实例fi(表示"my.ini"文件),并调用MoveTo()方法将my.ini文件移动为my01.ini文件。
     
    1. FileInfo fi = new FileInfo("my.ini");
    2. fi.MoveTo("my01.ini");
     
    分析:上述代码执行之后,实际上是创建了名称为my01.ini的新文件,并删除了my.ini文件。
     
    21.3.7 删除文件
     
    删除文件可以使用以下2种方法中的任何一种。
     
    File类的Delete()方法:将删除指定的文件。
     
    【示例21-23】 使用File类的Delete()方法删除my.ini文件。
     
    1. File.Delete(@"my.ini","my01.ini");
     
    FileInfo类的Delete()方法:将删除指定的文件。
     
    【示例21-24】 创建FileInfo类的实例fi(表示my.ini文件),并调用Delete()方法删除my.ini文件。
     
    1. FileInfo fi = new FileInfo("my.ini");
    2. fi.Delete("my.ini");
     
    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;
    15. }
     
    (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. }
    17. }
     
    (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();
    21. }
     
    (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. }
     
    (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. }
    24. }
     
    21.5 上 机 实 践
     
    1.代码调试
     
    在Visual Studio 2008集成开发环境中调试下列代码是否能够正常运行。如果能够正常运行,请写出运行结果。如果不能正常运行,请指出错误代码,并改正。
     
    1. namespace Test
    2. {
    3. class Program
    4. {
    5. static void Main(string[] args)
    6. {
    7. FileInfo fi = new FileInfo("my.ini");
    8. FileStream fsr = fi.OpenRead();
    9. byte[] datar = new byte[(int)fsr.Length];
    10. fsr.Read(datar,0,(int)fsr.Length);
    11. string valuer = System.Text.Encoding.Unicode.GetString(datar);
    12. Console.WriteLine(valuer);
    13. Console.Read();
    14. }
    15. }
    16. }
     
    2.编程题
     
    在Visual Studio 2008集成开发环境中创建名称为FileOperation的控制台应用程序,并在该应用程序中实现对readme.txt文件的读写操作。
    21.6 常见问题及解答
     
    问题:如何遍历一个目录下的所有目录(不包括子目录)和文件,并显示目录和文件的名称?
     
    解答:直接使用foreach语句和Directory类中的方法即可,程序代码如下。
     
    1. string path = …///被遍历的目录
    2. DirectoryInfo parentdi = new DirectoryInfo(path);
    3. ///创建path所指定目录的实例
    4. foreach(DirectoryInfo di in parentdi.GetDirectories())
    5. ///访问当前目录的子目录
    6. {
    7. Console.WriteLine(di.Name);
    8. ///显示子目录的名称
    9. }
    10. foreach(FileInfo fi in parentdi.GetFiles())
    11. ///访问当前目录的文件
    12. {
    13. Console.WriteLine(fi.Name);
    14. ///显示文件的名称
    15. }
  • 相关阅读:
    手动档和自动档
    关于目标:骑行里程破万的感想
    JavaScript基础学习-iterable
    第一个mybatisplus
    MAVEN安装配置
    List和ArrayList的区别
    mysql安装
    Nginx的命令
    Windows Server 2008/2012/2016允许多个用户同时远程桌面
    soapui模拟桩-4 将模拟桩打包成war包
  • 原文地址:https://www.cnblogs.com/spring_wang/p/12955202.html
Copyright © 2020-2023  润新知