本篇繼續(xù)前兩篇內(nèi)容,跟大家介紹一下Path類以及FileSystemInfo這個(gè)類的主要方法和屬性。
上文提到,在《C# 基礎(chǔ)知識(shí)系列-IO篇》之文件相關(guān)的內(nèi)容完結(jié)之后,會(huì)帶領(lǐng)大家開發(fā)一個(gè)小工具-快速檢索文件所在目錄。
1.3. Path
Path的中文名稱有路徑的意思,所以Path類就是路徑類,C#把Path設(shè)置為工具類,路徑的實(shí)例被區(qū)分為文件和目錄了。以下是它的定義:
public static class Path
路徑是描述文件和目錄的位置的字符串,路徑并不一定指向硬盤上,換句話說就是路徑不一定是物理路徑也有可能是虛擬路徑或者網(wǎng)絡(luò)路徑。在不同的操作系統(tǒng)和平臺(tái)上,路徑有著不同的表現(xiàn),所以Path類是對(duì)不同平臺(tái)行為的統(tǒng)一抽象。具體的路徑表示需要參照具體的系統(tǒng)表示形式。
那么我們先來看看Path為我們提供了哪些內(nèi)容,讓我們一睹為快:
1.3.1 字段
public static readonly char AltDirectorySeparatorChar; public static readonly char DirectorySeparatorChar;
這兩個(gè)是特定系統(tǒng)下的目錄分隔符,其中AltDirectorySeparatorChar表示正斜線(/),DirectorySeparatorChar 表示反斜線(\)。為什么說是特定系統(tǒng)下的目錄分隔符呢,因?yàn)閃indows環(huán)境對(duì)兩種分隔符都支持,但是Unix和類Unix系統(tǒng)只支持 / 作為目錄分隔符。所以如果系統(tǒng)需要跨平臺(tái)支持,則最好使用 AltDirectorySeparatorChar作為目錄分隔符來使用。
public static readonly char PathSeparator;
這個(gè)字段返回在環(huán)境變量中分隔路徑字符串的平臺(tái)特定的分隔符。Windows中返回一個(gè)分號(hào)(;),其他平臺(tái)可能會(huì)有不一樣的表現(xiàn)。
public static readonly char VolumeSeparatorChar;
這個(gè)表示卷分隔符,是個(gè)很有意思的特定。對(duì)于Linux系統(tǒng)來說并沒有類似于Windows一樣的卷,所以該字段會(huì)返回一個(gè)/ ,而Windows中例如:
D:\Temp\ 這個(gè)目錄則會(huì)返回冒號(hào)(:)。
1.3.2 方法
介紹完了字段,我們來看看Path給我們提供了哪些方法吧。
先從最常用的說起吧:
public static string Combine (params string[] paths); public static string Combine (string path1, string path2); public static string Combine (string path1, string path2, string path3); public static string Combine (string path1, string path2, string path3, string path4);
這一組方法用來拼接路徑,除第一個(gè)參數(shù)外,每個(gè)參數(shù)都應(yīng)當(dāng)是相對(duì)于之前參數(shù)拼接結(jié)果路徑的相對(duì)路徑。如果后續(xù)出現(xiàn)了絕對(duì)路徑,那之前計(jì)算出的路徑信息則會(huì)全部拋棄,重新計(jì)算。
以下是一個(gè)示例:
string[] paths = {@"d:\archives", "2001", "media", "images"}; string fullPath = Pa(paths); Con(fullPath); paths = new string[] {@"d:\archives\", @"2001\", "media", "images"}; fullPath = Pa(paths); Con(fullPath); paths = new string[] {"d:/archives/", "2001/", "media", "images"}; fullPath = Pa(paths); Con(fullPath); // Windows系統(tǒng)下的執(zhí)行結(jié)果 // d:\archives\2001\media\images // d:\archives\2001\media\images // d:/archives/2001/media\images // // 類Unix系統(tǒng)的執(zhí)行結(jié)果 // d:\archives/2001/media/images // d:\archives\/2001\/media/images // d:/archives/2001/media/images
繼續(xù)下一個(gè)方法:
public static string GetFullPath (string path, string basePath); public static string GetFullPath (string path);
獲取相對(duì)路徑的絕對(duì)路徑,其中 path 是相對(duì)路徑,basePath是絕對(duì)路徑。如果指定basePath,則從basePath根據(jù)path計(jì)算全路徑。
public static string GetRelativePath (string relativeTo, string path);
返回從一個(gè)路徑到另一個(gè)路徑的相對(duì)路徑,其中relativeTo是源路徑,path為目標(biāo)路徑。其中relativeTo始終是目錄,或者被認(rèn)為是目錄。
public static string GetDirectoryName (string path);
返回路徑path里的目錄信息,例如:"C:\Directory\SubDirectory\; ,返回"C:\Directory\SubDirectory",如果path是目錄,則返回其上級(jí)目錄的路徑字符串。
public static string Join (string path1, string path2, string path3, string path4); public static string Join (string path1, string path2, string path3); public static string Join (params string[] paths);
與Combine方法差不多,不過Join方法是把所以參數(shù)均按照相對(duì)目錄來拼接。
說完了目錄的一些操作,我們看看Path對(duì)文件路徑提供了哪些支持:
public static string GetFileName (string path);
獲取路徑里的文件名,例如說:“C:\mydir\my”,返回結(jié)果就是“my”,也就是說這個(gè)方法會(huì)返回?cái)y帶后綴名的文件名。因?yàn)槲募旧砭桶缶Y名。
public static string GetFileNameWithoutExtension (string path);
返回不帶后綴名的文件名,與GetFileName類似,但是不好含文件格式后綴。
public static bool HasExtension (string path);
確定是否包含后綴名,也稱格式名或者擴(kuò)展名。
public static string GetExtension (string path);
返回所代表的文件的后綴名。
public static string ChangeExtension (string path, string extension);
修改文件的后綴名。
這些是Path的常用方法,大家有個(gè)印象就好。
1.3 FileSystemInfo
文件系統(tǒng)信息,這是FileInfo和DirectoryInfo的兩個(gè)類的基類,它定義了文件系統(tǒng)中文件和目錄共有的一些屬性和方法。接下來讓我們簡(jiǎn)單看一看。
先來看一下類的聲明:
public abstract class FileSystemInfo : MarshalByRefObject, Sy
一個(gè)abstract類,這個(gè)標(biāo)記意味著這個(gè)類是一個(gè)抽象類,抽象類不能直接實(shí)例化,所以我們可能不會(huì)自己去直接實(shí)例化一個(gè)FileSystemInfo了。
所以我們先略過FileSystemInfo的構(gòu)造函數(shù),直接看屬性和方法。
public Sy Attributes { get; set; }
獲取或者設(shè)置當(dāng)前文件或目錄的特性,這個(gè)特性是一個(gè)枚舉,而且是一個(gè)位標(biāo)記的枚舉類型。
通過以下方式進(jìn)行判斷:
FileSystemInfo fsi; bool isXXX = & FileA) == FileA;
public DateTime CreationTime { get; set; } public DateTime CreationTimeUtc { get; set; }
返回文件/目錄的創(chuàng)建時(shí)間,其中UTC指協(xié)調(diào)世界時(shí) 。
public string Extension { get; }
獲取文件的文件后綴名(擴(kuò)展名),帶點(diǎn)號(hào)(.)。
public virtual string FullName { get; } public abstract string Name { get; }
都是返回文件或目錄的名稱,不過FullName返回的是全路徑名稱,Name只返回了文件名。
public DateTime LastAccessTime { get; set; } public DateTime LastAccessTimeUtc { get; set; }
獲取或設(shè)置文件最后一次訪問的時(shí)間,該屬性的返回值并不是嚴(yán)格意義上的最后一次訪問時(shí)間,因?yàn)椴糠窒到y(tǒng)不會(huì)及時(shí)更新。
public DateTime LastWriteTime { get; set; } public DateTime LastWriteTimeUtc { get; set; }
最后一次修改時(shí)間,可以自己設(shè)置或修改,類似與LastAccessTime,可能不是正確的值。
2. 總結(jié)
到目前為止,常用的文件API已經(jīng)介紹完畢。接下來將為大家演示各種流的使用,以及各種流的操作場(chǎng)景。
更多內(nèi)容煩請(qǐng)關(guān)注我的博客《高先生小屋》
1.《(c如何以文件路徑)如何顯示文件完整路徑?》援引自互聯(lián)網(wǎng),旨在傳遞更多網(wǎng)絡(luò)信息知識(shí),僅代表作者本人觀點(diǎn),與本網(wǎng)站無關(guān),侵刪請(qǐng)聯(lián)系頁(yè)腳下方聯(lián)系方式。
2.《(c如何以文件路徑)如何顯示文件完整路徑?》僅供讀者參考,本網(wǎng)站未對(duì)該內(nèi)容進(jìn)行證實(shí),對(duì)其原創(chuàng)性、真實(shí)性、完整性、及時(shí)性不作任何保證。
3.文章轉(zhuǎn)載時(shí)請(qǐng)保留本站內(nèi)容來源地址,http://f99ss.com/keji/3221322.html