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. }


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM