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) ==
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. }
作者: 王春天 出处: http://www.cnblogs.com/spring_wang/ Email: spring_best@yeah.net QQ交流:903639067
QQ群:322581894 关于作者: 大连天翼信息科技有限公司 技术总监。 SNF快速开发平台 创始人。应用平台架构师、IT规划咨询专家、业务流程设计专家。 专注于快速开发平台的开发、代码生成器。同时专注于微软平台项目架构、管理和企业解决方案,多年项目开发与管理经验,精通DotNet系列技术Vue、.NetCore、MVC、Webapi、C#、WinForm等,DB(SqlServer、Oracle等)技术,移动端开发。熟悉Java、VB及PB开发语言。在面向对象、面向服务以及数据库领域有一定的造诣。现从事项目实施、开发、架构等工作。并从事用友软件产品U8、U9、PLM 客开工作。 如有问题或建议,请多多赐教! 本文版权归作者和CNBLOGS博客共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,如有问题,可以通过邮箱或QQ 联系我,非常感谢。