C#-第7章-目錄與文件管理_第1頁
C#-第7章-目錄與文件管理_第2頁
C#-第7章-目錄與文件管理_第3頁
C#-第7章-目錄與文件管理_第4頁
C#-第7章-目錄與文件管理_第5頁
已閱讀5頁,還剩131頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡介

第7章目錄與文件管理目錄及文件管理是操作系統(tǒng)的一個(gè)重要組成局部,包括目錄的創(chuàng)立、移動(dòng)、刪除和文件的創(chuàng)立、移動(dòng)、復(fù)制、刪除以及對(duì)文件的讀寫等操作。一個(gè)完整的應(yīng)用程序,常常會(huì)涉及對(duì)系統(tǒng)和用戶的信息進(jìn)行存儲(chǔ)、讀取和修改等處理。因此,如何有效地實(shí)現(xiàn)目錄和文件操作也是必須掌握的一種技術(shù)。在C#語言中,可以方便地對(duì)文件進(jìn)行存儲(chǔ)和讀寫等。.NET框架提供的Directory類和DirectoryInfo類用于對(duì)磁盤和目錄進(jìn)行操作管理;File類和FileInfo類用于對(duì)文件進(jìn)行創(chuàng)立、復(fù)制、移動(dòng)、刪除和翻開等操作。而StreamReader和StreamWriter等類那么可以用于對(duì)文件以“流”的方式進(jìn)行讀寫操作。

本章主要內(nèi)容:目錄的瀏覽、創(chuàng)立、移動(dòng)、刪除FolderBrowserDialog控件文件的瀏覽、創(chuàng)立、移動(dòng)、復(fù)制、刪除OpenFileDialog控件和SaveFileDialog控件文本文件的讀寫操作二進(jìn)制文件的讀寫操作FileSystemWatcher組件第7章目錄與文件管理7.1系統(tǒng)環(huán)境相關(guān)類7.2目錄管理7.3文件管理7.4文件的讀寫7.5FileSystemWatcher組件應(yīng)用演示1應(yīng)用演示2利用樹形控件獲取目錄文件及其屬性信息應(yīng)用演示3動(dòng)畫顯示讀取的文本信息〔小游戲〕3.1System.IO命名空間3.1System.IO命名空間File提供用于創(chuàng)建、復(fù)制、刪除、移動(dòng)和打開文件的靜態(tài)方法,并協(xié)助創(chuàng)建FileStream

對(duì)象。

Directory公開用于創(chuàng)建、移動(dòng)和枚舉通過目錄和子目錄的靜態(tài)方法。無法繼承此類。

Path對(duì)包含文件或目錄路徑信息的String實(shí)例執(zhí)行操作。這些操作是以跨平臺(tái)的方式執(zhí)行的。Fileinfo提供創(chuàng)建、復(fù)制、刪除、移動(dòng)和打開文件的實(shí)例方法,并且?guī)椭鷦?chuàng)建FileStream對(duì)象。無法繼承此類。Directoryinfo公開用于創(chuàng)建、移動(dòng)和枚舉目錄和子目錄的實(shí)例方法。無法繼承此類。

Filestream公開以文件為主的Stream,既支持同步讀寫操作,也支持異步讀寫操作。Streamreader實(shí)現(xiàn)一個(gè)TextReader,使其以一種特定的編碼從字節(jié)流中讀取字符。FileSystemWatcher偵聽文件系統(tǒng)更改通知,并在目錄或目錄中的文件發(fā)生更改時(shí)引發(fā)事件。1、System.io類介紹7.1系統(tǒng)環(huán)境相關(guān)類.NET框架下,有與系統(tǒng)環(huán)境相關(guān)類。1.Environment類

該類除了提供當(dāng)前環(huán)境和操作系統(tǒng)平臺(tái)相關(guān)的信息外,還提供了獲取本地邏輯驅(qū)動(dòng)器和特殊文件夾的方法。此類不能被繼承。屬性說明CommandLine獲取該進(jìn)程的命令行。CurrentDirectory獲取或設(shè)置應(yīng)用程序當(dāng)前工作目錄的完全限定路徑。ExitCode獲取或設(shè)置進(jìn)程的退出代碼。HasShutdownStarted獲取一個(gè)值,該值指示公共語言運(yùn)行時(shí)

(CLR)是否正在關(guān)閉。Is64BitOperatingSystem確定當(dāng)前操作系統(tǒng)是否為

64位操作系統(tǒng)。(VS2010支持)Is64BitProcess確定當(dāng)前進(jìn)程是否為

64位進(jìn)程。(VS2010支持)MachineName獲取此本地計(jì)算機(jī)的

NetBIOS名稱。機(jī)器名NewLine獲取為此環(huán)境定義的換行字符串。對(duì)于非UNIX平臺(tái)即“\r\n”,對(duì)于UNIX平臺(tái)即“\n”O(jiān)SVersion獲取包含當(dāng)前平臺(tái)標(biāo)識(shí)符和版本號(hào)的OperatingSystem對(duì)象。ProcessorCount獲取當(dāng)前計(jì)算機(jī)上的處理器數(shù)。7.1.1Environment類的屬性StackTrace獲取當(dāng)前的堆棧跟蹤信息。SystemDirectory獲取系統(tǒng)目錄的完全限定路徑。SystemPageSize獲取操作系統(tǒng)的頁面文件的內(nèi)存量。TickCount獲取系統(tǒng)啟動(dòng)后經(jīng)過的毫秒數(shù)。UserDomainName獲取與當(dāng)前用戶關(guān)聯(lián)的網(wǎng)絡(luò)域名。UserInteractive獲取一個(gè)值,用以指示當(dāng)前進(jìn)程是否在用戶交互模式中運(yùn)行。UserName獲取當(dāng)前已登錄到

Windows操作系統(tǒng)的人員的用戶名。Version獲取一個(gè)Version對(duì)象,該對(duì)象描述公共語言運(yùn)行時(shí)的主版本、次版本、內(nèi)部版本和修訂號(hào)。WorkingSet獲取映射到進(jìn)程上下文的物理內(nèi)存量。7.1.1Environment類的屬性Exit終止此進(jìn)程并為基礎(chǔ)操作系統(tǒng)提供指定的退出代碼。ExpandEnvironmentVariables將嵌入到指定字符串中的每個(gè)環(huán)境變量的名稱替換為該變量的值的等效字符串,然后返回結(jié)果字符串。FailFast(String)向

Windows的應(yīng)用程序事件日志寫入消息后立即終止進(jìn)程,然后在發(fā)往

Microsoft的錯(cuò)誤報(bào)告中加入該消息。FailFast(String,Exception)向

Windows的應(yīng)用程序事件日志寫入消息后立即終止進(jìn)程,然后在發(fā)往

Microsoft的錯(cuò)誤報(bào)告中加入該消息和異常信息。GetCommandLineArgs返回包含當(dāng)前進(jìn)程的命令行參數(shù)的字符串?dāng)?shù)組。GetEnvironmentVariable(String)從當(dāng)前進(jìn)程檢索環(huán)境變量的值。GetEnvironmentVariable(String,EnvironmentVariableTarget)從當(dāng)前進(jìn)程或者從當(dāng)前用戶或本地計(jì)算機(jī)的

Windows操作系統(tǒng)注冊表項(xiàng)檢索環(huán)境變量的值。7.1.1Environment類的方法GetEnvironmentVariables()從當(dāng)前進(jìn)程檢索所有環(huán)境變量名及其值。GetEnvironmentVariables(EnvironmentVariableTarget)從當(dāng)前進(jìn)程或者從當(dāng)前用戶或本地計(jì)算機(jī)的

Windows操作系統(tǒng)注冊表項(xiàng)檢索所有環(huán)境變量名及其值。GetFolderPath(Environment.SpecialFolder)獲取由指定枚舉標(biāo)識(shí)的系統(tǒng)特殊文件夾的路徑。GetFolderPath(Environment.SpecialFolder,Environment.SpecialFolderOption)獲取由指定枚舉標(biāo)識(shí)的系統(tǒng)特殊文件夾的路徑,并使用用于訪問特殊文件夾的指定選項(xiàng)。GetLogicalDrives返回包含當(dāng)前計(jì)算機(jī)中的邏輯驅(qū)動(dòng)器名稱的字符串?dāng)?shù)組。SetEnvironmentVariable(String,String)創(chuàng)建、修改或刪除當(dāng)前進(jìn)程中存儲(chǔ)的環(huán)境變量。SetEnvironmentVariable(String,String,EnvironmentVariableTarget)創(chuàng)建、修改或刪除當(dāng)前進(jìn)程中或者為當(dāng)前用戶或本地計(jì)算機(jī)保留的

Windows操作系統(tǒng)注冊表項(xiàng)中存儲(chǔ)的環(huán)境變量。7.1.1Environment類〔續(xù)〕GetFolderPath方法獲取指向由指定枚舉標(biāo)識(shí)的系統(tǒng)特殊文件夾的路徑,枚舉值由Environment.SpecialFolder來指定,常用特殊文件夾有:Desktop:邏輯桌面,而不是物理文件系統(tǒng)位置MyComputer:“我的電腦”文件夾MyDocuments:“我的文檔”文件夾ProgramFiles:“Programfiles”目錄7.1.1Environment類〔續(xù)〕 Console.WriteLine("我的文檔:{0}",

Environment.GetFolderPath(Environment.SpecialFolder.MyDocuments));

Console.WriteLine("操作系統(tǒng)版本:{0}",Environment.

OSVersion.VersionString);

String[]drives=Environment.GetLogicalDrives(); Console.WriteLine("本機(jī)邏輯驅(qū)動(dòng)器:{0}",String.Join(",",drives));2.DriveInfo類此類對(duì)驅(qū)動(dòng)器進(jìn)行建模,并提供方法和屬性以查詢驅(qū)動(dòng)器信息。

使用

DriveInfo

來確定哪些驅(qū)動(dòng)器可用,以及這些驅(qū)動(dòng)器的類型。

還可以通過查詢來確定驅(qū)動(dòng)器的容量和可用空閑空間。7.1系統(tǒng)環(huán)境相關(guān)類DriveInfo類提供了比Environment類的GetLocalDrives方法更為詳盡的信息,使用DriveInfo可以確定當(dāng)前可用的驅(qū)動(dòng)器以及這些驅(qū)動(dòng)器的類型,還可以通過查詢來確定驅(qū)動(dòng)器的容量和剩余空間。7.1.2DriveInfo類的屬性名稱說明AvailableFreeSpace指示驅(qū)動(dòng)器上的可用空閑空間量。DriveFormat獲取文件系統(tǒng)的名稱,例如

NTFS或

FAT32。DriveType獲取驅(qū)動(dòng)器類型。IsReady獲取一個(gè)指示驅(qū)動(dòng)器是否已準(zhǔn)備好的值。Name獲取驅(qū)動(dòng)器的名稱。RootDirectory獲取驅(qū)動(dòng)器的根目錄。TotalFreeSpace獲取驅(qū)動(dòng)器上的可用空閑空間總量。若將磁盤配額考慮在內(nèi),該值可能與AvailableFreeSpace值不同TotalSize獲取驅(qū)動(dòng)器上存儲(chǔ)空間的總大小。VolumeLabel獲取或設(shè)置驅(qū)動(dòng)器的卷標(biāo)。7.1.2DriveInfo類的屬性名稱說明Equals(Object)確定指定的Object是否等于當(dāng)前的Object。(繼承自O(shè)bject。)Finalize允許對(duì)象在“垃圾回收”回收之前嘗試釋放資源并執(zhí)行其他清理操作。(繼承自O(shè)bject。)GetDrives檢索計(jì)算機(jī)上的所有邏輯驅(qū)動(dòng)器的驅(qū)動(dòng)器名稱。GetHashCode用作特定類型的哈希函數(shù)。(繼承自O(shè)bject。)GetType獲取當(dāng)前實(shí)例的Type。(繼承自O(shè)bject。)MemberwiseClone創(chuàng)建當(dāng)前Object的淺表副本。(繼承自O(shè)bject。)ToString將驅(qū)動(dòng)器名稱作為字符串返回。(重寫Object.ToString()。)7.1.2DriveInfo類的方法7.1.2DriveInfo類DriveInfo[]allDrives=DriveInfo.GetDrives();foreach(DriveInfodinallDrives){Console.WriteLine("Drive{0}",d.Name);Console.WriteLine("文件類型:{0}",d.DriveType);if(d.IsReady){Console.WriteLine("卷標(biāo):{0}",d.VolumeLabel);Console.WriteLine("文件系統(tǒng):{0}",d.DriveFormat);Console.WriteLine("當(dāng)前用戶可用空間:{0}bytes",d.AvailableFreeSpace);Console.WriteLine("總可用空間:{0}bytes",d.TotalFreeSpace);Console.WriteLine("驅(qū)動(dòng)器總?cè)萘?{0}bytes",d.TotalSize);}}IsReady

指示驅(qū)動(dòng)器是否已準(zhǔn)備好。

例如,它指示CD是否在CD驅(qū)動(dòng)器中,或者可移動(dòng)存儲(chǔ)設(shè)備是否已準(zhǔn)備好執(zhí)行讀/寫操作。

如果您未測試驅(qū)動(dòng)器是否已準(zhǔn)備好,而它沒有準(zhǔn)備好,那么使用

DriveInfo

查詢驅(qū)動(dòng)器會(huì)引發(fā)

IOException。不依賴

IsReady

來防止捕捉其他成員的異常,例如,TotalSize、TotalFreeSpace

DriveFormat。

在代碼檢查

IsReady,然后訪問其他屬性之一〔即使訪問在檢查后進(jìn)行〕的時(shí)間內(nèi),驅(qū)動(dòng)器可能已斷開連接或磁盤可能已被刪除。7.1.2DriveInfo類7.1.2DriveInfo類7.2目錄管理在System.IO命名空間中,.NET框架提供了3種對(duì)目錄進(jìn)行管理的類,分別是Directory類、DirectoryInfo類和Path類。1.Directory類和DirectoryInfo類均可用于對(duì)磁盤和目錄進(jìn)行操作,比方復(fù)制、移動(dòng)、重命名、創(chuàng)立和刪除目錄等。

DirectoryInfo類與Directory類的不同點(diǎn)在于DirectoryInfo類必須被實(shí)例化后才能使用,而Directory類那么只提供了靜態(tài)的方法。實(shí)際編程中,如果屢次使用某個(gè)對(duì)象(需要執(zhí)行屢次磁盤和目錄操作),一般用DirectoryInfo類;如果僅執(zhí)行某一個(gè)操作,那么使用Directory類提供的靜態(tài)方法效率更高一些。7.2目錄管理區(qū)別:Directory類〔只提供靜態(tài)方法,Directory類靜態(tài)方法每次使用總是進(jìn)行平安檢查;適用于只使用一次的情況〕DirectoryInfo類〔需要實(shí)例化才能使用,DirectoryInfo類在創(chuàng)立實(shí)例時(shí)進(jìn)行平安檢查,實(shí)例方法調(diào)用時(shí)不再進(jìn)行平安檢查;適用于屢次使用同一對(duì)象的情況〕7.2目錄管理DirectoryInfo類屬性屬性說明Attributes

獲取或設(shè)置當(dāng)前

FileSystemInfo

FileAttributes。(從

FileSystemInfo

繼承。)CreationTime

獲取或設(shè)置當(dāng)前

FileSystemInfo

對(duì)象的創(chuàng)建時(shí)間。(從

FileSystemInfo

繼承。)CreationTimeUtc

獲取或設(shè)置當(dāng)前

FileSystemInfo

對(duì)象的創(chuàng)建時(shí)間,其格式為協(xié)調(diào)通用時(shí)間

(UTC)。(從

FileSystemInfo

繼承。)Exists已重寫。獲取指示目錄是否存在的值。Extension

獲取表示文件擴(kuò)展名部分的字符串。(從

FileSystemInfo

繼承。)FullName

獲取目錄或文件的完整目錄。(從

FileSystemInfo

繼承。)DirectoryInfo類屬性LastAccessTime

獲取或設(shè)置上次訪問當(dāng)前文件或目錄的時(shí)間。(從

FileSystemInfo

繼承。)LastAccessTimeUtc

獲取或設(shè)置上次訪問當(dāng)前文件或目錄的時(shí)間,其格式為協(xié)調(diào)通用時(shí)間

(UTC)。(從

FileSystemInfo

繼承。)LastWriteTime

獲取或設(shè)置上次寫入當(dāng)前文件或目錄的時(shí)間。(從

FileSystemInfo

繼承。)LastWriteTimeUtc

獲取或設(shè)置上次寫入當(dāng)前文件或目錄的時(shí)間,其格式為協(xié)調(diào)通用時(shí)間

(UTC)。(從

FileSystemInfo

繼承。)Name已重寫。獲取此

DirectoryInfo

實(shí)例的名稱。Parent獲取指定子目錄的父目錄。Root獲取路徑的根部分。DirectoryInfo類DirectoryInfo類的構(gòu)造函數(shù)形式如下:publicDirectoryInfo(stringpath);參數(shù)path表示目錄所在的路徑。例如:DirectoryInfodirInfo=newDirectoryInfo(@"e:\temp");注意:〔1〕path必需是合法的路徑?!?〕用下的枚舉 可以獲取特殊文件夾路徑。7.2目錄管理(續(xù))目錄屬性獲取舉例:DirectoryInfodirInfo=newDirectoryInfo(@"e:\temp");if(dirInfo.Exists){Console.WriteLine("目錄的全名為:{0}",dirInfo.FullName);Console.WriteLine("目錄的父目錄為:{0}",dirInfo.Parent.Name);Console.WriteLine("目錄的根目錄{0}",dirInfo.Root.Name);Console.WriteLine("目錄的創(chuàng)立時(shí)間為:{0}",dirInfo.CreationTime);}else{Console.WriteLine("目錄不存在!");}DirectoryInfo類

DirectoryInfo類

Attributes:獲取或設(shè)置當(dāng)前FileSystemInfo的 FileAttributes。

例如:

DirectoryInfod=newDirectoryInfo(@"c:\MyDir");

d.Attributes=FileAttributes.ReadOnly;

Directory類的靜態(tài)方法屬性說明CreateDirectory(String)在指定路徑創(chuàng)建所有目錄和子目錄。返回DirectoryInfo類型CreateDirectory(String,DirectorySecurity)創(chuàng)建指定路徑中的所有目錄,并應(yīng)用指定的

Windows安全性。Delete(String)從指定路徑刪除空目錄。Delete(String,Boolean)刪除指定的目錄并(如果指示)刪除該目錄中的所有子目錄和文件。Exists(stringpath)確定給定路徑是否引用磁盤上的現(xiàn)有目錄。GetAccessControl(String)獲取一個(gè)

DirectorySecurity

對(duì)象,該對(duì)象封裝指定目錄的訪問控制列表

(ACL)項(xiàng)。GetAccessControl(String,AccessControlSections)獲取一個(gè)

DirectorySecurity

對(duì)象,它封裝指定目錄的指定類型的訪問控制列表

(ACL)項(xiàng)。GetCreationTime獲取目錄的創(chuàng)建日期和時(shí)間。GetCurrentDirectory獲取應(yīng)用程序的當(dāng)前工作目錄。Directory類的靜態(tài)方法GetDirectories(String)獲取指定目錄中的子目錄的名稱(包括其路徑)。GetDirectories(String,String)在當(dāng)前目錄獲取與指定搜索模式匹配的目錄的數(shù)組(包括它們的路徑)。GetDirectories(String,String,SearchOption)獲取與在當(dāng)前目錄中的指定搜索模式相匹配的目錄(包括其路徑)的名稱,并且可以搜索子目錄。GetDirectoryRoot返回指定路徑的卷信息、根信息或兩者同時(shí)返回。GetFiles(String)返回指定目錄中文件的名稱(包括其路徑)。GetFiles(String,String)返回指定目錄中與指定的搜索模式匹配的文件的名稱(包含它們的路徑)。GetFiles(String,String,SearchOption)返回指定目錄中與指定的搜索模式匹配的文件的名稱(包含它們的路徑),并使用一個(gè)值以確定是否搜索子目錄。GetFileSystemEntries(String)返回指定目錄中所有文件和子目錄的名稱。Directory類的靜態(tài)方法GetFileSystemEntries(String,String)返回與指定搜索條件匹配的文件系統(tǒng)項(xiàng)的數(shù)組。GetFileSystemEntries(String,String,SearchOption)獲取指定路徑中與搜索模式匹配的所有文件名稱和目錄名稱的數(shù)組,還可以搜索子目錄。GetLastAccessTime返回上次訪問指定文件或目錄的日期和時(shí)間。GetLastWriteTime返回上次寫入指定文件或目錄的日期和時(shí)間。GetLogicalDrives檢索此計(jì)算機(jī)上格式為“<盤符>:\”的邏輯驅(qū)動(dòng)器的名稱。GetParent檢索指定路徑的父目錄,包括絕對(duì)路徑和相對(duì)路徑。Move將文件或目錄及其內(nèi)容移到新位置。SetAccessControl將

DirectorySecurity

對(duì)象描述的訪問控制列表

(ACL)項(xiàng)應(yīng)用于指定的目錄。Directory類的靜態(tài)方法SetCreationTime為指定的文件或目錄設(shè)置創(chuàng)建日期和時(shí)間。SetCurrentDirectory將應(yīng)用程序的當(dāng)前工作目錄設(shè)置為指定的目錄。SetLastAccessTime設(shè)置上次訪問指定文件或目錄的日期和時(shí)間。SetLastWriteTime設(shè)置上次寫入目錄的日期和時(shí)間。Directory類和DirectoryInfo類的使用使用Directory類的GetFileSystemEntries方法獲取指定路徑下的文件和文件夾信息;使用DirectoryInfo對(duì)象的GetDirectories方法獲取子目錄信息、GetFiles方法獲取文件信息;string[]s=Directory.GetFileSystemEntries(Application.StartupPath);for(inti=0;i<s.Length;i++){listBox1.Items.Add(s[i]);}DirectoryInfod=newDirectoryInfo(Application.StartupPath);FileInfo[]ds=d.GetFiles();for(inti=0;i<ds.Length;i++){listBox1.Items.Add(ds[i].FullName);}目錄操作應(yīng)用舉例(DirectoryExample)翻開FolderBrowserDialog對(duì)話框,獲取用戶選定路徑,為WorkDirectory賦值在Settings.settings文件中添加一個(gè)表示工作目錄的字符串WorkDirectory讀取WorkDirectory值,翻開指定目錄,讀取文件和子目錄,添加到listBox中l(wèi)istBoxPath類2.Path類:對(duì)包含文件或目錄路徑信息的

String

實(shí)例執(zhí)行操作。

這些操作是以跨平臺(tái)的方式執(zhí)行的。Path類的絕大多數(shù)成員不與文件系統(tǒng)交互,并且不驗(yàn)證路徑字符串指定的路徑是不是存在,但Path成員驗(yàn)證表示路徑的字符串是不是有效,如果表示路徑的字符串中包含無效字符,那么該類將引發(fā)ArgumentException異常。Path類的靜態(tài)方法GetDirectoryName返回指定路徑字符串的目錄信息。如果路徑由根目錄構(gòu)成,如“c:\”則返回nullGetExtension返回指定的路徑字符串的擴(kuò)展名。GetFileName返回指定路徑字符串的文件名和擴(kuò)展名。GetFileNameWithoutExtension返回不具有擴(kuò)展名的指定路徑字符串的文件名。GetFullPath返回指定路徑字符串的絕對(duì)路徑。GetInvalidFileNameChars獲取包含不允許在文件名中使用的字符的數(shù)組。GetInvalidPathChars獲取包含不允許在路徑名中使用的字符的數(shù)組。GetExtension〔〕方法通過搜索

path

來查找句點(diǎn)(.)、以路徑中的最后一個(gè)字符為起始并繼續(xù)直到路徑的開始,獲取

path

的擴(kuò)展名。如果句點(diǎn)在

DirectorySeparatorChar〔即\〕

AltDirectorySeparatorChar字符之前找到,那么返回的字符串包含該句點(diǎn)以及該句點(diǎn)之后的字符;否那么,返回

Empty。Path類的靜態(tài)方法方法說明GetPathRoot獲取指定路徑的根目錄信息。GetRandomFileName返回隨機(jī)文件夾名或文件名。GetTempFileName創(chuàng)建磁盤上唯一命名的零字節(jié)的臨時(shí)文件并返回該文件的完整路徑。GetTempPath返回當(dāng)前用戶的臨時(shí)文件夾的路徑。HasExtension確定路徑是否包括文件擴(kuò)展名。IsPathRooted獲取指示指定的路徑字符串是否包含根的值。Path類的靜態(tài)方法Path類例如stringfileName=@"C:\mydir\myfile.ext";stringpath=@"C:\mydir\";stringrootPath=@"C:\";Console.WriteLine(Path.GetDirectoryName(fileName));//返回:'C:\mydir'Console.WriteLine(Path.GetDirectoryName(path));//返回:'C:\mydir'Console.WriteLine(Path.GetDirectoryName(rootPath));//返回:''stringfileName1=@"C:\mydir.old\myfile.ext";stringpath1=@"C:\mydir.old\";

Console.WriteLine(Path.GetExtension(fileName1));//返回:'.ext'Console.WriteLine(Path.GetExtension(path1));//返回:''如果path1=@"C:\mydir.old";那么返回.old7.2.3目錄的創(chuàng)立、刪除和移動(dòng)1.創(chuàng)立目錄方法1:Directory類的CreateDirectory方法用于創(chuàng)立指定路徑中的所有目錄。publicstaticDirectoryInfoCreateDirectory(stringpath)參數(shù)path,為要?jiǎng)?chuàng)立的目錄路徑。如果指定的目錄不存在,程序調(diào)用該方法后,系統(tǒng)按指定的路徑創(chuàng)立所有目錄和子目錄。舉例:Directory.CreateDirectory("c:\\test");創(chuàng)立多級(jí)子目錄樹時(shí),也可以指定路徑。Directory.CreateDirectory("c:\\test\\t1\\t2");1.創(chuàng)立目錄方法2:使用DirectoryInfo類的Create方法創(chuàng)立目錄;語法:publicvoidCreate();先創(chuàng)立DirectoryInfo對(duì)象,再調(diào)用Create方法;舉例:DirectoryInfod=newDirectoryInfo(@"D:\aa");

d.Create();7.2.3目錄的創(chuàng)立、刪除和移動(dòng)2、刪除目錄方法1:使用Directory類的Delete靜態(tài)方法刪除目錄;語法1:publicstaticvoidDelete(stringpath);語法2:publicstaticvoidDelete(stringpath,boolrecursive);參數(shù)path:要?jiǎng)?chuàng)立的目錄路徑,需為合法路徑;其不區(qū)分大小寫,可以是相對(duì)于當(dāng)前工作目錄的相對(duì)路徑,也可以是絕對(duì)路徑。參數(shù)recursive:假設(shè)取值為true,那么刪除此目錄、其子目錄以及所有文件;假設(shè)取值為false,那么只刪除空目錄;舉例:Directory.Delete(@"D:\bb");7.2.3目錄的創(chuàng)立、刪除和移動(dòng)2.刪除目錄方法2:使用DirectoryInfo類的Delete方法刪除目錄;語法1:publicoverridevoidDelete();語法2:publicvoidDelete(boolrecursive);舉例:DirectoryInfod=newDirectoryInfo(@"D:\aa");

d.Delete();7.2.3目錄的創(chuàng)立、刪除和移動(dòng)3.移動(dòng)目錄方法1:Directory類的Move方法能夠重命名或移動(dòng)目錄。方法原型為publicstaticvoidMove(stringsourceDirName,stringdestDirName)其中,sourceDirName為要移動(dòng)的文件或目錄的路徑,必須已經(jīng)存在;destDirName為新位置的目標(biāo)路徑。注意:destDirName參數(shù)指定的目標(biāo)路徑應(yīng)為新目錄,并且只能在同一個(gè)磁盤內(nèi)移動(dòng)。如果目標(biāo)目錄指定了文件夾沒有指定驅(qū)動(dòng)器路徑那么會(huì)移動(dòng)到當(dāng)前工程的bin/debug下。源目錄會(huì)被刪除掉。3.移動(dòng)目錄方法2:使用DirectoryInfo類的MoveTo方法移動(dòng)目錄;語法:publicvoidMoveTo(stringdestDirName);舉例:DirectoryInfod=newDirectoryInfo(@"D:\aa");d.MoveTo(@"D:\bb");7.2.3目錄的創(chuàng)立、刪除和移動(dòng)目錄的創(chuàng)立、刪除與移動(dòng)2.DirectoryInfo類提供的實(shí)例方法〔1〕創(chuàng)立目錄舉例:DirectoryInfoinfo=newDirectoryInfo(@"c:\test");if(!info.Exists){info.Create();}〔2〕刪除目錄舉例:DirectoryInfoinfo=newDirectoryInfo(@"c:\test");info.Delete(true);〔3〕移動(dòng)目錄舉例:DirectoryInfoinfo=newDirectoryInfo(@"c:\test");info.MoveTo("C:\\abc");7.2.4FolderBrowserDialog對(duì)話框1.功能:以樹形控件的形式將指定路徑的文件夾顯示出來,并提供瀏覽、創(chuàng)立、選擇文件夾的功能。2.常用方法: ShowDialog方法,其返回值為DialogResult類型的枚舉值3.使用舉例調(diào)用FolderBrowserDialog的ShowDialog方法可以翻開對(duì)話框,如果用戶在對(duì)話框中單擊【確定】,那么對(duì)話框的返回結(jié)果為DialogResultOk,否那么為DialogResultCancel。此類提供一種方法,它提示用戶瀏覽、創(chuàng)立并最終選擇一個(gè)文件夾。如果只允許用戶選擇文件夾而非文件,那么可使用此類。文件夾的瀏覽通過樹控件完成。只能選擇文件系統(tǒng)中的文件夾;不能選擇虛擬文件夾。7.2.4FolderBrowserDialog對(duì)話框FolderBrowserDialog控件的主要屬性:Container

獲取

IContainer,它包含

Component。

(從

Component

繼承。)Description獲取或設(shè)置對(duì)話框中在樹視圖控件上顯示的說明文本。RootFolder獲取或設(shè)置從其開始瀏覽的根文件夾。SelectedPath獲取或設(shè)置用戶選定的路徑。ShowNewFolderButton獲取或設(shè)置一個(gè)值,該值指示“新建文件夾”按鈕是否顯示在文件夾瀏覽對(duì)話框中。Site

獲取或設(shè)置

Component

ISite。

(從

Component

繼承。)Tag

獲取或設(shè)置一個(gè)對(duì)象,該對(duì)象包含控件的數(shù)據(jù)。

(從

CommonDialog

繼承。)FolderBrowserDialog控件的主要方法方法說明Dispose釋放由Component占用的資源(從Component繼承)Equals確定兩個(gè)Object實(shí)例是否相等(從Object繼承)Reset將屬性重置為其默認(rèn)值ShowDialog顯示對(duì)話框,具有DialogResult類型的返回值GetService返回一個(gè)對(duì)象,該對(duì)象表示由Component或它的Container提供的服務(wù)(從Component繼承)FolderBrowserDialog控件7.3文件管理文件是在各種介質(zhì)上永久存儲(chǔ)的數(shù)據(jù)的有序集合,是數(shù)據(jù)讀寫操作的根本對(duì)象。一般情況下,文件按照樹形目錄進(jìn)行組織,每個(gè)文件都有文件名、文件所在路徑、創(chuàng)立時(shí)間、訪問權(quán)限等屬性。System.IO命名空間中文件操作類:〔1〕File〔2〕FileInfo用于對(duì)文件進(jìn)行各種操作,如創(chuàng)立、復(fù)制、移動(dòng)、刪除、讀寫文件等。7.3.1File類與FileInfo類相同點(diǎn):都能完成對(duì)文件的復(fù)制、移動(dòng)、重命名、創(chuàng)立、翻開、刪除和追加到文件操作,并協(xié)助創(chuàng)立FileStream對(duì)象。。不同點(diǎn):FileInfo類必須被實(shí)例化,并且每個(gè)FileInfo的實(shí)例必須對(duì)應(yīng)于系統(tǒng)中一個(gè)實(shí)際存在的文件。提供實(shí)例化后的屬性、方法。File為靜態(tài)類,只提供靜態(tài)方法。如果只想執(zhí)行一個(gè)操作,那么使用File方法的效率比使用FileInfo實(shí)例方法可能更高。如果想屢次重用某個(gè)對(duì)象,可考慮使用FileInfo的實(shí)例方法,而不是File類的靜態(tài)方法。從性能上考慮,如果你要屢次操作文件,不管是針對(duì)相同的,還是不同的,請使用FileInfo,說白了,單打獨(dú)斗File最棒,群毆那么首推FileInfo。每次通過File類調(diào)用某個(gè)方法時(shí),都要占用一定的cpu,而FileInfo類只在創(chuàng)立FileInfo對(duì)象時(shí)執(zhí)行一次平安檢查。7.3.1File類與FileInfo類FileInfo類FileInfo類的構(gòu)造函數(shù)形式如下:

publicFileInfo(stringpath);參數(shù)path表示目錄所在的路徑,path必需是合法的路徑;例如:FileInfofile=newFileInfo(@“d:\temp.txt");FileInfo類的常用屬性屬性名說明Attributes屬性獲取或設(shè)置文件的屬性,可取FileAttributes枚舉值之一CreationTime屬性獲取或設(shè)置文件的創(chuàng)建時(shí)間Directory屬性獲取文件的父目錄實(shí)例,DirectoryInfo對(duì)象Exists屬性獲取文件是否存在的布爾值Extension屬性獲取文件的擴(kuò)展名字符串FullName屬性獲取文件的完整路徑IsReadOnly屬性獲取或設(shè)置文件是否只讀的布爾值Length屬性獲取文件的大?。ㄗ止?jié)數(shù))FileInfo類的常用方法方法名說明AppendText方法使用StreamWrite對(duì)象向文件中追加文本CopyTo方法將文件復(fù)制到指定路徑下Create方法創(chuàng)建文件MoveTo方法將文件移動(dòng)至指定路徑下Open方法用各種讀/寫訪問權(quán)限和共享特權(quán)打開文件OpenRead方法創(chuàng)建只讀FileStreamOpenWrite方法創(chuàng)建只寫FileStreamReplace方法將一個(gè)文件替換為另一個(gè)文件,并創(chuàng)建被替換文件的備份;注:替換與被替換的文件都需存在;File類的靜態(tài)方法靜態(tài)方法名說明AppendAllText方法將指定的字符串追加到文件中,若文件不存在則創(chuàng)建AppendText方法創(chuàng)建StreamWriter,將UTF-8編碼文本追加到現(xiàn)有文件Copy方法將現(xiàn)有文件復(fù)制到新文件Create方法在指定路徑中創(chuàng)建文件CreateText方法創(chuàng)建或打開一個(gè)文件用于寫入U(xiǎn)TF-8編碼的文本Delete方法刪除指定的文件,若指定的文件不存在,不引發(fā)異常Exists方法確定指定的文件是否存在GetAttributes方法獲取在此路徑上的文件的FileAttributesMove方法將指定文件移到新位置,并提供指定新文件名的選項(xiàng)。剪切Open方法打開指定路徑上的FileStreamReadAllLines方法打開一個(gè)文本文件,將文件的所有行都讀入一個(gè)字符串?dāng)?shù)組,然后關(guān)閉該文件Replace方法使用其他文件的內(nèi)容替換指定文件的內(nèi)容,這一過程將刪除原始文件,并創(chuàng)建被替換文件的備份讀寫文本文件3-1靜態(tài)方法CreateText(stringFilePath)OpenText(stringFilePath)Open(stringFilePath,FileMode)Create(stringFilePath)OpenRead(stringFilePath)AppendText(stringFilePath)60System.IO命名空間繼承類

FileStream類File類7.3.2文件復(fù)制、刪除與移動(dòng)1、判斷文件是否存在2、復(fù)制文件3、刪除文件4、移動(dòng)文件1、判斷文件是否存在方法1:使用File類的Exists靜態(tài)方法;語法:publicstaticboolExists(stringpath);參數(shù)path:要?jiǎng)?chuàng)立的目錄路徑,需為合法路徑;返回值類型為bool舉例:if(File.Exists(@“D:\dd.txt”))//方法

{……}方法2:使用FileInfo類的Exists屬性;FileInfofs=newFileInfo(@"D:\dd.txt“)if(fs.Exists)//屬性

{……}2、復(fù)制文件方法1:使用File類的Copy靜態(tài)方法;語法1:publicstaticvoidCopy(stringsourceFileName,stringdestFileName);語法2:publicstaticvoidCopy(stringsourceFileName,stringdestFileName,booloverwrite);參數(shù)sourceFileName、destFileName:源/目標(biāo)文件路徑;參數(shù)overwrite:可以覆蓋目標(biāo)文件的布爾值;舉例:

File.Copy(@"d:\aa.txt",@"d:\bb.txt",true);注意:源文件必須存在方法2:使用FileInfo類的CopyTo方法;語法1:publicFileInfoCopyTo(stringdestFileName);語法2:publicFileInfoCopyTo(stringdestFileName,booloverwrite);舉例:FileInfof=newFileInfo(@"d:\aa.txt");f.CopyTo(@"d:\bb.txt",true);2、復(fù)制文件staticvoidMain(string[]args)

{stringsourcepath=@"c:\temp\mytest.txt";stringtargetpath=@"c:\1.txt";if(File.Exists(sourcepath))

{File.Copy(sourcepath,targetpath);Console.WriteLine("復(fù)制成功");

}else

{Console.WriteLine("對(duì)不起,未發(fā)現(xiàn)路徑文件!");

}Console.Read();

}3、刪除文件方法1:使用File類的Delete靜態(tài)方法;如果指定的文件不存在,那么不進(jìn)行任何操作,也不會(huì)產(chǎn)生異常。語法:publicstaticvoidDelete(stringpath);參數(shù)path:要?jiǎng)h除的文件的名稱;舉例:File.Delete(@"d:\aa.txt");方法2:使用FileInfo類的Delete方法;如果文件不存在,那么此方法不執(zhí)行任何操作。語法:publicoverridevoidDelete();舉例:FileInfof=newFileInfo(@"d:\aa.txt");f.Delete();4、移動(dòng)文件方法1:使用File類的Move靜態(tài)方法;語法:publicstaticvoidMove(stringsourceFileName,stringdestFileName);舉例:

File.Move(@"d:\aa.txt",@"d:\bb.txt");

方法2:使用FileInfo類的MoveTo方法;語法:publicvoidMoveTo(stringdestFileName);舉例:FileInfof=newFileInfo(@"d:\aa.txt");f.MoveTo(@"d:\bb.txt");注意:Move方法不提供創(chuàng)立目錄的功能,要確保存在目標(biāo)文件目錄。7.3.3文件屬性1.設(shè)置或獲取屬性

(1)對(duì)File類:用SetAttributes方法,GetAttributes方法設(shè)置、獲取。publicstaticvoidSetAttributes(stringpath,FileAttributesfileAttributes)publicstaticFileAttributesGetAttributes(stringpath)

(2)對(duì)FileInfo類:用Attributes屬性設(shè)置、獲取。

(3)注意:

FileAttributes的每個(gè)枚舉值代表目錄或者文件的一個(gè)屬性,各個(gè)枚舉值是按照2的冪排列的,即依次為20,21,22,23

,……可以利用“與”、“或”操作設(shè)置或獲取單個(gè)屬性。7.3.3文件屬性成員名說明ReadOnly此文件是只讀的。Hidden文件是隱藏的,因此沒有包括在普通的目錄列表中。System此文件是系統(tǒng)文件。

它是操作系統(tǒng)的一部分,或者由操作系統(tǒng)以獨(dú)占方式使用。Directory此文件是一個(gè)目錄。Archive文件的存檔狀態(tài)。

應(yīng)用程序使用此特性為文件加上備份或移除標(biāo)記。Device保留供將來使用。Normal文件正常,沒有設(shè)置其他的特性。

僅當(dāng)單獨(dú)使用時(shí),此特性才有效。FileAttributes枚舉Temporary文件是臨時(shí)文件。

文件系統(tǒng)嘗試將所有數(shù)據(jù)保留在內(nèi)存中以便更快地訪問,而不是將數(shù)據(jù)刷新回大容量存儲(chǔ)器中。

當(dāng)臨時(shí)文件不再需要時(shí),應(yīng)用程序應(yīng)立即刪除它。SparseFile此文件是稀疏文件。

稀疏文件一般是數(shù)據(jù)通常為零的大文件。ReparsePoint文件包含一個(gè)重新分析點(diǎn),它是一個(gè)與文件或目錄關(guān)聯(lián)的用戶定義的數(shù)據(jù)塊。Compressed此文件是壓縮文件。Offline此文件處于脫機(jī)狀態(tài),

文件數(shù)據(jù)不能立即供使用。NotContentIndexed將不會(huì)通過操作系統(tǒng)的內(nèi)容索引服務(wù)來索引此文件。Encrypted此文件或目錄已加密。

對(duì)于文件來說,表示文件中的所有數(shù)據(jù)都是加密的。

對(duì)于目錄來說,表示新創(chuàng)建的文件和目錄在默認(rèn)情況下是加密的。FileAttributes枚舉7.3.3文件屬性與設(shè)置判斷某個(gè)路徑是目錄還是文件下面的代碼演示了如何判斷某個(gè)路徑是目錄還是文件:if((File.GetAttributes(path)&FileAttributes.Directory)==FileAttributes.Directory){Console.WriteLine("“{0}”是目錄",path);}else{Console.WriteLine("“{0}”是文件",path);}File.GetAttributes(path)得到該文件的所有屬性,將其與FileAttributes.Directory相“與”后,就把其他屬性屏蔽了〔每個(gè)枚舉值的二進(jìn)制表示都單獨(dú)占1位〕判斷某個(gè)文件是不是隱藏,如果屬性不是隱藏那么將其屬性設(shè)置為隱藏stringpath=@“c:\mytest.txt”if((File.GetAttributes(path)&FileAttributes.Hidden)!=FileAttributes.Hidden){File.SetAttributes(path,File.GetAccessControl(path)|FileAttributes.Hidden);}7.3.3文件屬性與設(shè)置

OpenFileDialog、SaveFileDialog控件1.功能:OpenFileDialog用于讓用戶選擇要翻開文件的文件名,用戶可以使用此對(duì)話框來指定一個(gè)或多個(gè)要翻開的文件的文件名。顯示用戶翻開文件的對(duì)話框。SaveFileDialog:用戶可以為要保存的文件指定一個(gè)文件名和瀏覽的路徑2.常用屬性〔見下頁〕:3.常用方法:ShowDialog()調(diào)用SaveFileDialog的ShowDialog()方法,將翻開另存為對(duì)話框,如果用戶在對(duì)話框中單擊【保存】。屬性名說明ShowReadOnly確定是否在對(duì)話框中顯示只讀復(fù)選框ReadOnlyChecked指示是否選中只讀復(fù)選框Multiselect

獲取或設(shè)置一個(gè)值,該值指示對(duì)話框是否允許選擇多個(gè)文件。FileName獲取或設(shè)置一個(gè)包含在文件對(duì)話框中選定的文件名的字符串。如果選定了多個(gè)文件名,則FileName包含第一個(gè)選定的文件名。如果未選定任何文件名,則此屬性包含Empty,而不是null。FileNames

獲取對(duì)話框中所有選定文件的文件名。返回字符串?dāng)?shù)組Filter獲取或設(shè)置當(dāng)前文件名篩選器字符串。字符串每項(xiàng)都有“提示信息|實(shí)際類型”組成。實(shí)際類型如果有多項(xiàng),各項(xiàng)之間用分號(hào)分隔。InitialDirectory

獲取或設(shè)置文件對(duì)話框顯示的初始目錄。CheckPathExists

獲取或設(shè)置一個(gè)值,該值指示如果用戶指定不存在的路徑,對(duì)話框是否顯示警告。Title

獲取或設(shè)置文件對(duì)話框標(biāo)題。OpenFileDialog屬性

OpenFileDialog、SaveFileDialog控件4.如何設(shè)置初始目錄

設(shè)置OpenFileDialog的InitialDirectory屬性即可5.如何篩選文件類型下拉列表中的每項(xiàng)都有一個(gè)“提示信息|實(shí)際類型”組成OpenFileDialog1.Filter=“Images(*.BMP;*.JPG;*.GIF)|*.BMP;*.JPG;*.GIF|"+"Allfiles(*.*)|*.*";6.如何同時(shí)選擇多個(gè)文件?〔默認(rèn)只能單項(xiàng)選擇〕

openFileDialog1.Multiselect=true;7.對(duì)話框關(guān)閉后,如何判斷選擇的文件名和路徑名

使用Path類提供的靜態(tài)方法分別獲取目錄名和文件名。Path.GetDirectoryName()和GetFilename〔〕【例7-1】利用FolderBrowerDialog、OpenFileDialog和SaveFileDialog對(duì)話框,設(shè)計(jì)一個(gè)Windows應(yīng)用程序,實(shí)現(xiàn)將文件從一個(gè)目錄復(fù)制到另一個(gè)目錄的功能。7.3.4OpenFileDialog、SaveFileDialog控件7.4文件的讀寫在System.IO命名空間中,提供了多種類用于進(jìn)行數(shù)據(jù)文件和數(shù)據(jù)流的讀寫操作。主要有:

1.文件編碼,提供了多種編碼。

2.文本文件的讀寫。

3.二進(jìn)制文件的讀寫。7.4.1文件的編碼1.文件編碼將文件的內(nèi)容按照某種格式保存稱為對(duì)文件進(jìn)行編碼。常見的文件編碼方式有ASCII編碼、Unicode編碼、UTF8編碼和ANSI編碼。Unicode編碼:一個(gè)漢字和一個(gè)英文字符均占兩個(gè)字節(jié),存在浪費(fèi)。UTF〔通用轉(zhuǎn)換格式〕:UTF-8,UTF-16,UTF-32ANSI編碼:〔AmericanNationalStandardsInstitute〕,中文:美國國家標(biāo)準(zhǔn)學(xué)會(huì)的標(biāo)準(zhǔn)碼。不同的國家和地區(qū)制定了不同的標(biāo)準(zhǔn),由此產(chǎn)生了GB2312,BIG5,JIS等各自的編碼標(biāo)準(zhǔn)。為了讓操作系統(tǒng)根據(jù)不同國家或地區(qū)自動(dòng)選擇對(duì)應(yīng)的編碼標(biāo)準(zhǔn),操作系統(tǒng)把使用2個(gè)字節(jié)來代表一個(gè)字符的各種編碼方式統(tǒng)稱為ANSI編碼2.在System.Text命名空間中,有一個(gè)Encoding類,用于表示字符編碼。對(duì)文件進(jìn)行操作時(shí),常用的編碼方式有Encoding.Default 表示操作系統(tǒng)的當(dāng)前ANSI編碼Encoding.Unicode Unicode編碼Encoding.UTF8 UTF8編碼3.文件處理中,翻開文件指定的編碼一定要和文件保存所用的編碼保持一致,否那么可能看到的是亂碼。7.4.2文本文件的讀寫File類的靜態(tài)方法〔1.1〕ReadAllText方法〔1.2〕AppendAllText方法〔1.3〕ReadAllLines方法〔1.4〕WriteAllLines方法〔1.5〕WriteAllText方法流操作類〔2.1〕StreamReader類〔2.2〕StreamWriter類〔2.3〕FileStream類和FileStream對(duì)象〔1.1〕ReadAllText方法ReadAllText方法翻開文件,讀取文件的每一行,將每行添加為字符串的一個(gè)元素,最終拼成字符串返回,并關(guān)閉文件;即使引發(fā)異常,該方法也能保證關(guān)閉文件句柄。語法1publicstaticstringReadAllText(stringpath);參數(shù)path為某文件的合法路徑;返回指定文件內(nèi)容的字符串;語法2publicstaticstringReadAllText(stringpath,Encodingencoding);參數(shù)encoding一般選擇Default;〔1.2〕AppendAllText方法AppendAllText方法將指定的字符串追加到文件中,假設(shè)文件不存在那么自動(dòng)創(chuàng)立;語法1publicstaticvoidAppendAllText(stringpath,stringcontents);參數(shù)path為文件的合法路徑;參數(shù)contents為要追加到文件中的字符串;語法2publicstaticvoidAppendAllText(stringpath,stringcontents,Encodingencoding);參數(shù)encoding一般選擇Default;可以自動(dòng)檢測UTF-8和UTF-32,對(duì)于其他的編碼那么無法指定。ReadAllText方法和AppendAllText方法例如stringpath=@"c:\temp\MyTest.txt";if(File.Exists(path)){File.Delete(path);}stringappendText="你好。"+Environment.NewLine;File.AppendAllText(path,appendText,Encoding.Default);stringreadText=File.ReadAllText(path,Encoding.Default);Console.WriteLine(readText);〔1.3〕ReadAllLines方法ReadAllLines方法翻開一個(gè)文本文件,將文件的所有行都讀入一個(gè)字符串?dāng)?shù)組,然后關(guān)閉該文件;語法1publicstaticstring[]ReadAllLines(stringpath);語法2publicstaticstring[]ReadAllLines(stringpath,

Encodingencoding);ReadAllLines方法返回一個(gè)字符串?dāng)?shù)組,每個(gè)數(shù)組元素為文件中的一行;〔1.4〕WriteAllLines方法WriteAllLines方法將指定字符串?dāng)?shù)組內(nèi)容寫入目標(biāo)文件,寫入后關(guān)閉文件;假設(shè)目標(biāo)文件不存在,那么創(chuàng)立;假設(shè)目標(biāo)文件已存在,那么覆蓋;語法1publicstaticvoidWriteAllLines(stringpath,string[]contents);參數(shù)contents為要添加目標(biāo)文件中的行信息;語法2publicstaticvoidWriteAllLines(stringpath,

string[]contents,Encodingencoding);ReadAllLines方法和WriteAllLines方法例如stringpath=@"c:\temp\MyTest.txt";if(File.Exists(path)){File.Delete(path);}string[]appendText={"單位","姓名","成績"};File.WriteAllLines(path,appendText,Encoding.Default);string[]readText=File.ReadAllLines(path,Encoding.Default);Console.WriteLine(string.Join(Environment.NewLine,readText));〔1.5〕WriteAllText方法WriteAllText方法把字符串寫入到文件中,替換目標(biāo)文件中的原有內(nèi)容;假設(shè)目標(biāo)文件不存在,那么創(chuàng)立文件;語法1publicstaticvoidWriteAllText(stringpath,stringcontents);語法2publicstaticvoidWriteAllText(stringpath,stringcontents, Encodingencoding);7.4.2文本文件的讀寫3.StreamReader類和StreamWriter類1、在計(jì)算機(jī)編程中,流就是一個(gè)類的對(duì)象,很多文件的輸入輸出操作都以類的成員函數(shù)的方式來提供。2、計(jì)算機(jī)中的流其實(shí)是一種信息的轉(zhuǎn)換。它是一種有序流,因此相對(duì)于某一對(duì)象,通常我們把對(duì)象接收外界的信息輸入〔Input〕稱為輸入流,相應(yīng)地從對(duì)象向外輸出〔Output〕信息為輸出流,合稱為輸入/輸出流〔I/OStreams〕。對(duì)象間進(jìn)行信息或者數(shù)據(jù)的交換時(shí)總是先將對(duì)象或數(shù)據(jù)轉(zhuǎn)換為某種形式的流,再通過流的傳輸,到達(dá)目的對(duì)象后再將流轉(zhuǎn)換為對(duì)象數(shù)據(jù)。所以,可以把流看作是一種數(shù)據(jù)的載體,通過它可以實(shí)現(xiàn)數(shù)據(jù)交換和傳輸。流是字節(jié)序列的抽象概念。流也是進(jìn)行數(shù)據(jù)讀取操作的根本對(duì)象,流提供了連續(xù)的字節(jié)流存儲(chǔ)空間。流有如下幾種操作。讀?。簭牧髦凶x取數(shù)據(jù)到變量中。寫入:把變量中的數(shù)據(jù)寫入到流中。定位:重新設(shè)置流的當(dāng)前位置,以便隨機(jī)讀寫7.4.2文本文件的讀寫7.4.2文本文件的讀寫流操作類及其關(guān)系圖3.StreamReader類和StreamWriter類對(duì)于文件的讀寫,最常用的類簡單介紹如下:Stream類:流的基類,定義流的根本操作。FileStream類:用于對(duì)文件執(zhí)行讀寫操作,支持同步和異步讀寫。MemoryStream類:無緩存的流,該流以內(nèi)存作為數(shù)據(jù)流。NetWorkStream類:以網(wǎng)絡(luò)為數(shù)據(jù)源的流,可以通過此流發(fā)送或接收網(wǎng)絡(luò)數(shù)據(jù)。TextReader類:StreamReader對(duì)象的抽象基類,定義根本字符讀取操作。實(shí)現(xiàn)從流讀取字符操作TextWriter類:StreamWriter對(duì)象的抽象基類,定義根本字符寫入操作。向流寫入字符。7.4.2文本文件的讀寫7.4.2文本文件的讀寫3.StreamReader類和StreamWriter類StreamReader類 〔1〕提供了利用流來按行讀取文本文件信息的方法?!?〕如果不指定編碼,StreamReader的默認(rèn)編碼為UTF-8,而不是當(dāng)前系統(tǒng)的ANSI編碼。因此如果文本文件是通過應(yīng)用程序創(chuàng)立的,直接使用默認(rèn)的UTF-8編碼即可。StreamReader類對(duì)象獲得形式:利用構(gòu)造函數(shù)new一個(gè)StreamReader對(duì)象;語法:newStreamReader(stringpath,Encodingen);參數(shù)en可指定編碼格式;讀取其他編碼格式的文本文件時(shí)采用此形式利用File類的OpenText靜態(tài)方法獲??;語法:File.OpenText(stringpath);這種形式適合讀取UTF-8編碼的文本文件。利用FileInfo類的OpenText方法獲??;語法:FileInfof=newFileInfo(path);

StreamReadersr=f.OpenText();//創(chuàng)立使用UTF8編碼、從現(xiàn)有文本文件中進(jìn)行讀取的StreamReader。7.4.2文本文件的讀寫7.4.2文本文件的讀寫例:利用StreamReader讀取文件stringpath=@"c:\temp\MyTest.txt";using(StreamReadersr=newStreamReader(path)){Stringline;while((line=sr.ReadLine())!=null){Console.WriteLine(line);}}名稱說明Close關(guān)閉

StreamReader

對(duì)象和基礎(chǔ)流,并釋放與讀取器關(guān)聯(lián)的所有系統(tǒng)資源。Peek返回下一個(gè)可用的字符,但不使用它。Read已重載。讀取輸入流中的下一個(gè)字符或下一組字符。ReadBlock

從當(dāng)前流中讀取最大

count的字符并從

index

開始將該數(shù)據(jù)寫入

buffer。ReadLine從當(dāng)前流中讀取一行字符并將數(shù)據(jù)作為字符串返回。ReadToEnd從流的當(dāng)前位置到末尾讀取流。StreamReader類的常用方法7.4.2文本文件的讀寫StreamWriter類〔1/3〕StreamWriter類的功能利用流來按行向文本文件中寫入信息;默認(rèn)使用UTF-8編碼,而不是當(dāng)前系統(tǒng)的ANSI編碼。StreamWriter類對(duì)象獲得形式:利用構(gòu)造函數(shù)new一個(gè)StreamWriter對(duì)象;語法:newStreamWriter(stringpath,Encodingen);參數(shù)en可指定編碼格式;寫入其他編碼格式的文件時(shí)采用此形式利用File類的AppendText或CreateText靜態(tài)方法獲??;語法1:File.AppendText(stringpath);//創(chuàng)立一個(gè)StreamWriter,它將UTF-8編碼文本追加到現(xiàn)有文件。語法2:File.CreateText(stringpath);//publicstaticStreamWriterCreateText(stringpath)利用FileInfo類的AppendText方法獲取;語法:FileInfof=newFileInfo(path);StreamWritersr=f.AppendText();注意path中要保證目錄是存在的,語法2只能創(chuàng)立文件,而不能創(chuàng)立目錄,如果目錄不存在那么會(huì)出現(xiàn)“System.IO.DirectoryNotFoundException”StreamWriter類〔2/3〕StreamWriter類〔3/3〕舉例:使用StreamWriter類向文本文件寫入文本信息stringpath1=@"c:\temp\MyTest1.txt";using(StreamWritersw=newStreamWriter(path1)){sw.WriteLine("Firstline");sw.WriteLine("Thedateis:{0}",DateTime.Now);}StreamWriter類的常用方法:WriteLine():按行寫入文本信息。Write():把信息寫入到流。Close():關(guān)閉流。FileStream類FileStream類功能:對(duì)進(jìn)行讀取、寫入、翻開和關(guān)閉操作,并對(duì)其他與文件相關(guān)的操作系統(tǒng)句柄進(jìn)行操作;讀寫操作可以指定為同步或異步操作。FileStream實(shí)例用于讀寫文件中的數(shù)據(jù)。要構(gòu)造FileStream實(shí)例,需要以下4條信息:要訪問的文件。表示如何翻開文件的模式。例如,創(chuàng)立一個(gè)新文件或翻開一個(gè)現(xiàn)有的文件。如果翻開一個(gè)現(xiàn)有的文件,寫入操作是覆蓋文件原來的內(nèi)容,還是添加到文件的末尾?表示訪問文件的方式——是只讀、只寫,還是讀寫?共享訪問——表示是否獨(dú)占訪問文件。如果允許

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論