C# 获取文件大小,创建时间,文件信息,FileInfo类的属性表
???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實例。
?? FileInfo fi = new FileInfo("my.ini");?????
?? ///創建FileInfo類的實例fi??
?? FileStream fsw = fi.OpenWrite();??????????
??? ///使用OpenWrite()方法打開my.ini文件??
??? string valuew = "這是一個配置文件。";??????????
??? ///設置被寫入的內容??
??? byte[] dataw = System.Text.Encoding.Unicode.GetBytes(valuew);??
??? ///轉換為byte數組,保存為dataw??
??? fsw.Write(dataw,0,dataw.Length);??????
?? ///將dataw數組中的內容寫入到my.ini文件??
?? fsw.Close();??????????????????????????????
?? ///調用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實例。
??? FileInfo fi = new FileInfo("my.ini");?????
??? ///創建FileInfo類的實例fi??
??? FileStream fsr = fi.OpenRead();???????????
??? ///使用OpenRead()方法打開my.ini文件??
??? byte[] datar = new byte[(int)fsr.Length];??
??? ///創建datar數組,保存從my.ini文件讀取的內容??
??? fsr.Read(datar,0,(int)fsr.Length);????
??? ///讀取my.ini文件的內容,保存到datar數組??
??? string valuer = System.Text.Encoding.Unicode.GetString(datar);??
?? ///將datar數組轉換為string,保存為valuer??
?? Console.WriteLine(valuer);????????????????
?? ///顯示my.ini文件的內容??
?? fsr.Close();??????????????????????????????
?? ///調用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)方法的程序代碼如下。
??? /// <summary> 讀取文件的內容 </summary>??
??? public static string ReaderFile(string path)??
??? {??
?????? string fileData = string.Empty;??
?????? try?
??????? {?? ///讀取文件的內容??
??????????? StreamReader reader = new???
??????????? StreamReader(path,Encoding.Default);??
??????????? fileData = reader.ReadToEnd();??
?????????? reader.Close();??
?????? }??
????? catch(ExceptI/On ex){throw new ExceptI??
????? /On(ex.Message,ex);}? ///拋出異常??
????? 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)方法的程序代碼如下:
??? /// <summary> 讀取子目錄下的所有文件的內容 </summary>??
??? private static void ReaderSubDirectory(string path,string filter,ref???
??? StringBuilder content)??
??? {?? ///判斷目錄是否正確??
??????? if(string.IsNullOrEmpty(path) == true) return;??
??? ///創建目錄信息的實例??
????? DirectoryInfo parentDI = new DirectoryInfo(path);??
?????? ///讀取當前目錄及其子目錄下的指定文件的內容,??
?? 都保存到content變量中??
??? foreach(FileInfo fi in parentDI.??
????? GetFiles(filter,SearchOptI/On.AllDirectories))??
?????? {??
?????????? content.AppendLine();??
???????? content.Append(ReaderFile(fi.FullName));??
???????? content.AppendLine();??
????? }??
? }
(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)方法的程序代碼如下:
??? /// <summary> 讀取指定目錄下的所有文件 </summary>??
??? public static string ReaderDirectory(string path,string filter)??
?? {?? ///判斷目錄是否正確??
?????? if(string.IsNullOrEmpty(path) == true) return string.Empty;??
?????? StringBuilder content = new StringBuilder();??????????????
??????? ///保存讀取的內容??
??????? ///如果過濾器(filter)為空,則默認讀取所有文件的內容??
???? if(string.IsNullOrEmpty(filter) == true)??
??? {??
???????? ReaderSubDirectory(path,filter,ref content);??
??? }??
????? else?
?????? {?? ///如果過濾器(filter)不為空,則獲取被讀取的文件??
???? string[] filters = filter.Split(new char[] { '|' },??
????? StringSplitOptI/Ons.RemoveEmptyEntries);??
?????? ///讀取每一個文件的內容??
foreach(string fi in filters){ReaderSubDirectory(path,fi,ref???
??????? content);}??
??? }??
????? return content.ToString();??
? }
(5)在Program.cs文件的Main(string[] args)方法中調用ReaderDirectory(string path,string filter)方法讀取"C:\data"目錄下的、后綴名為.cs的所有文件的內容,并顯示在控制臺中。程序代碼如下:
??? static void Main(string[] args)??
??? {?? ///讀取"C:\data"目錄下的所有的以",cs"結尾文件的內容,??
?? 并顯示??
?????? Console.WriteLine(ReaderDirectory(@"C:\data","*.cs"));??
?????? Console.Read();??
??? }
(6)在Visual Studio 2008集成開發環境按下F5鍵,運行Sample_21應用程序。控制臺顯示的部分結果如下:
?? using System;??
?? using System.CollectI/Ons;??
?? using System.Text;??
?? using System.I/O;??
?? using System.Windows.Forms;??
?????
??? namespace Dorient.FileParse.Component??
??? {??
??????????? public class File??
????????? {??
?
? ///寫入文件??
?? StreamWriter writer = new StreamWriter(path,false,??
?Encoding.Default);??
?? writer.Write(content);??
? writer.Close();??
??????????????????????? }??
????????????????????????? catch(ExceptI/On ex)??
?????????????????????????? {??
?? MessageBox.Show(ex.Message,"寫入文件錯誤");??
?????????????????????????? }??
?????????????????? }??
?????????? }??
?? }
21.5? 上 機 實 踐
1.代碼調試
在Visual Studio 2008集成開發環境中調試下列代碼是否能夠正常運行。如果能夠正常運行,請寫出運行結果。如果不能正常運行,請指出錯誤代碼,并改正。
??? namespace Test??
??? {??
?????? class Program??
??????? {??
??????????? static void Main(string[] args)??
??????????? {??
??? FileInfo fi = new FileInfo("my.ini");??
??? FileStream fsr = fi.OpenRead();??
??? byte[] datar = new byte[(int)fsr.Length];??
?? fsr.Read(datar,0,(int)fsr.Length);??
?? string valuer = System.Text.Encoding.Unicode.GetString(datar);??
?? Console.WriteLine(valuer);??
?? Console.Read();??
?????????? }??
?????? }??
?? }
2.編程題
在Visual Studio 2008集成開發環境中創建名稱為FileOperation的控制臺應用程序,并在該應用程序中實現對readme.txt文件的讀寫操作。
21.6? 常見問題及解答
問題:如何遍歷一個目錄下的所有目錄(不包括子目錄)和文件,并顯示目錄和文件的名稱?
解答:直接使用foreach語句和Directory類中的方法即可,程序代碼如下。
??? string path = …///被遍歷的目錄??
??? DirectoryInfo parentdi = new DirectoryInfo(path);???
?? ///創建path所指定目錄的實例??
??? foreach(DirectoryInfo di in parentdi.GetDirectories())???
?? ///訪問當前目錄的子目錄??
??? {??
?????? Console.WriteLine(di.Name);??????????????????????????????
??????? ///顯示子目錄的名稱??
??? }??
?? foreach(FileInfo fi in parentdi.GetFiles())???
?? ///訪問當前目錄的文件??
?? {??
????? Console.WriteLine(fi.Name);???????????????????
?????? ///顯示文件的名稱??
? }
轉載于:https://www.cnblogs.com/Hdsome/archive/2012/02/02/2335344.html
與50位技術專家面對面20年技術見證,附贈技術全景圖總結
以上是生活随笔為你收集整理的C# 获取文件大小,创建时间,文件信息,FileInfo类的属性表的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: nhibernate:composite
- 下一篇: C# .net web.config配置