C# 基礎知識系列- 14 IO篇 文件的操作 (3)

本篇繼續前兩篇內容,跟大家介紹一下Path類以及FileSystemInfo這個類的主要方法和屬性。

上文提到,在《C# 基礎知識系列-IO篇》之文件相關的內容完結之後,會帶領大家開發一個小工具-快速檢索文件所在目錄。


C# 基礎知識系列- 14 IO篇 文件的操作 (3)


1.3. Path

Path的中文名稱有路徑的意思,所以Path類就是路徑類,C#把Path設置為工具類,路徑的實例被區分為文件和目錄了。以下是它的定義:

<code>

public

static

class

Path

/<code>

路徑是描述文件和目錄的位置的字符串,路徑並不一定指向硬盤上,換句話說就是路徑不一定是物理路徑也有可能是虛擬路徑或者網絡路徑。在不同的操作系統和平臺上,路徑有著不同的表現,所以Path類是對不同平臺行為的統一抽象。具體的路徑表示需要參照具體的系統表示形式。

那麼我們先來看看Path為我們提供了哪些內容,讓我們一睹為快:

1.3.1 字段

<code>

public

static

readonly

char

AltDirectorySeparatorChar;

public

static

readonly

char

DirectorySeparatorChar;/<code>

這兩個是特定系統下的目錄分隔符,其中AltDirectorySeparatorChar表示正斜線(/),DirectorySeparatorChar 表示反斜線(\)。為什麼說是特定系統下的目錄分隔符呢,因為Windows環境對兩種分隔符都支持,但是Unix和類Unix系統只支持 / 作為目錄分隔符。所以如果系統需要跨平臺支持,則最好使用 AltDirectorySeparatorChar作為目錄分隔符來使用。

<code>

public

static

readonly

char

PathSeparator;/<code>

這個字段返回在環境變量中分隔路徑字符串的平臺特定的分隔符。Windows中返回一個分號(;),其他平臺可能會有不一樣的表現。

<code>

public

static

readonly

char

VolumeSeparatorChar;/<code>

這個表示卷分隔符,是個很有意思的特定。對於Linux系統來說並沒有類似於Windows一樣的卷,所以該字段會返回一個/ ,而Windows中例如:

D:\Temp\ 這個目錄則會返回冒號(:)。

1.3.2 方法

介紹完了字段,我們來看看Path給我們提供了哪些方法吧。

先從最常用的說起吧:

<code>

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

)

;/<code>

這一組方法用來拼接路徑,除第一個參數外,每個參數都應當是相對於之前參數拼接結果路徑的相對路徑。如果後續出現了絕對路徑,那之前計算出的路徑信息則會全部拋棄,重新計算。

以下是一個示例:

<code>

string

[] paths = {

@"d:\archives"

,

"2001"

,

"media"

,

"images"

};

string

fullPath = Path.Combine(paths); Console.WriteLine(fullPath); paths =

new

string

[] {

@"d:\archives"

,

@"2001"

,

"media"

,

"images"

}; fullPath = Path.Combine(paths); Console.WriteLine(fullPath); paths =

new

string

[] {

"d:/archives/"

,

"2001/"

,

"media"

,

"images"

}; fullPath = Path.Combine(paths); Console.WriteLine(fullPath); /<code>
C# 基礎知識系列- 14 IO篇 文件的操作 (3)

繼續下一個方法:

<code>

public

static

string

GetFullPath

(

string

path,

string

basePath)

;

public

static

string

GetFullPath

(

string

path)

;/<code>

獲取相對路徑的絕對路徑,其中 path 是相對路徑,basePath是絕對路徑。如果指定basePath,則從basePath根據path計算全路徑。

<code>

public

static

string

GetRelativePath

(

string

relativeTo,

string

path)

;/<code>

返回從一個路徑到另一個路徑的相對路徑,其中relativeTo是源路徑,path為目標路徑。其中relativeTo始終是目錄,或者被認為是目錄。

<code>

public

static

string

GetDirectoryName

(

string

path)

;/<code>

返回路徑path裡的目錄信息,例如:"C:\Directory\SubDirectory\test.txt" ,返回"C:\Directory\SubDirectory",如果path是目錄,則返回其上級目錄的路徑字符串。

<code>

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

)

;/<code>

與Combine方法差不多,不過Join方法是把所以參數均按照相對目錄來拼接。

說完了目錄的一些操作,我們看看Path對文件路徑提供了哪些支持:

<code>

public

static

string

GetFileName

(

string

path)

;/<code>

獲取路徑裡的文件名,例如說:“C:\mydir\myfile.ext”,返回結果就是“myfile.ext”,也就是說這個方法會返回攜帶後綴名的文件名。因為文件名本身就包含後綴名。

<code>

public

static

string

GetFileNameWithoutExtension

(

string

path)

;/<code>

返回不帶後綴名的文件名,與GetFileName類似,但是不好含文件格式後綴。

<code>

public

static

bool

HasExtension

(

string

path)

;/<code>

確定是否包含後綴名,也稱格式名或者擴展名。

<code>

public

static

string

GetExtension

(

string

path)

;/<code>

返回所代表的文件的後綴名。

<code>

public

static

string

ChangeExtension

(

string

path,

string

extension)

;/<code>

修改文件的後綴名。

這些是Path的常用方法,大家有個印象就好。


C# 基礎知識系列- 14 IO篇 文件的操作 (3)


1.3 FileSystemInfo

文件系統信息,這是FileInfo和DirectoryInfo的兩個類的基類,它定義了文件系統中文件和目錄共有的一些屬性和方法。接下來讓我們簡單看一看。

先來看一下類的聲明:

<code>

public

abstract

class

FileSystemInfo

:

MarshalByRefObject

,

System.Runtime.Serialization.ISerializable

/<code>

一個abstract類,這個標記意味著這個類是一個抽象類,抽象類不能直接實例化,所以我們可能不會自己去直接實例化一個FileSystemInfo了。

C# 基礎知識系列- 14 IO篇 文件的操作 (3)

所以我們先略過FileSystemInfo的構造函數,直接看屬性和方法。

<code>

public

System.IO.FileAttributes Attributes {

get

;

set

; }/<code>

獲取或者設置當前文件或目錄的特性,這個特性是一個枚舉,而且是一個位標記的枚舉類型。


C# 基礎知識系列- 14 IO篇 文件的操作 (3)


通過以下方式進行判斷:

<code>

FileSystemInfo

fsi;

bool

isXXX = (fsi.Attributes & FileAttributes.XXX) == FileAttributes.XXX; /<code>
<code>

public

DateTime CreationTime {

get

;

set

; }

public

DateTime CreationTimeUtc {

get

;

set

; }/<code>

返回文件/目錄的創建時間,其中UTC指協調世界時 。

<code>

public

string

Extension {

get

; }/<code>

獲取文件的文件後綴名(擴展名),帶點號(.)。

<code>

public

virtual

string

FullName {

get

; }

public

abstract

string

Name {

get

; }/<code>

都是返回文件或目錄的名稱,不過FullName返回的是全路徑名稱,Name只返回了文件名。

<code>

public

DateTime LastAccessTime {

get

;

set

; }

public

DateTime LastAccessTimeUtc {

get

;

set

; }/<code>

獲取或設置文件最後一次訪問的時間,該屬性的返回值並不是嚴格意義上的最後一次訪問時間,因為部分系統不會及時更新。

<code>

public

DateTime LastWriteTime {

get

;

set

; }

public

DateTime LastWriteTimeUtc {

get

;

set

; }/<code>

最後一次修改時間,可以自己設置或修改,類似與LastAccessTime,可能不是正確的值。

C# 基礎知識系列- 14 IO篇 文件的操作 (3)

2. 總結

到目前為止,常用的文件API已經介紹完畢。接下來將為大家演示各種流的使用,以及各種流的操作場景。

更多內容煩請關注我的博客《高先生小屋》

C# 基礎知識系列- 14 IO篇 文件的操作 (3)


分享到:


相關文章: