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)


分享到:


相關文章: