本篇繼續(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