svlib(2) – 目录操作

        svlib库中,提供了对目录的操作。其实是实现了一个类Pathname,来实现对目录操作的。

一、           Pathname类的使用

实现了一个类,Pathname来实现对目录的操作。该类的new方法是protected的,表示外部不可以调用new方法创建该对象实例。而是要通过其他方法来得到对象实例。

调用类的create方法,获取单例对象实例。需要传入待操作的目录。

clip_image002[4]

 

 以下是Pathname类提供的外部可以调用的方法:

image

 

如以下代码:

clip_image005[4]

 abs_dir设置为一个绝对路径的文件。

方法

说明

结果

get

完整路径

/home/jun.lu/test.sv

dirname

目录名

/home/jun.lu/test

dirname(2)

目录名,去除最后一个目录

/home/jun.lu

extension

文件扩展名

.sv

basename

文件名,不包括文件扩展名

/home/jun.lu/test/test

tail

路径的最后一部分

test.sv

tail(2)

路径的最后两部分

test/test.sv

volume

分隔符

/

isAbsolute

路径是否是绝对路径

1

执行结果:

clip_image007[4]

 

对于一个非绝对路径的文件。

clip_image008[4]

 

执行结果,因为是相对路径,因此isAbsolute函数返回0

clip_image010[4]

 

 二、           Pathname类解析

Pathname类中,有一个qs类型的变量comp

clip_image011[4]

 

这是一个typedef定义的类型,在svlib_private_base_pkg.svh中,有定义。

clip_image013[4]

qs是一个字符串类型的队列。

 

对于Pathname类,create方法。该方法,是获取单例对象。调用Obstack类,获取单例对象。然后调用Pathname类中的set方法。

clip_image014[4]

 

对于Obstack,是一个参数化的类。参数就是类,这里就是Pathname。该类,继承Pathname,因此可以使用Pathname类的new方法,创建对象实例。

clip_image016[4]

 

Pathname类的set方法。首先是调用Str类的create方法.

clip_image017[6]

 

Str是一个类,该类的new方法也是protected,因此外部不能调用new方法创建该类对象实例。需要调用create方法,来获取对象实例。

clip_image018[4]

同样是调用Obstack得到对象实例。然后调用Str类的setClean方法。其实就是将类中的protect变量value,设置为传入的参数。

clip_image019[4]

 

调用Str类的split方法,对类中的value变量,按照指定的分隔符,进行切分,结果保存在动态数组components中。

         clip_image017[7]

components中的内容,保存到 Pathname类的comps队列中。同时判断value的第一个字符内容是不是/,是的话,表示绝对路径,否则不是绝对路径。

假如传递的path /home/jun.lu/test/test.sv

 

clip_image021

 

假如传递的path../test/test.sv

clip_image023

Pathname类中的setappendapendPNcopy方法,会对comps这个队列内容进行修改。 

Pathname类中的其他的方法,其实就是根据comps队列的内容,然后进行处理,返回不同的信息。

 

此条目发表在IC, 语言相关分类目录,贴了标签。将固定链接加入收藏夹。

发表评论

电子邮件地址不会被公开。