树形目录在PB中的实现与应用

树形目录在PB中的实现与应用,第1张

1.引言

在管理信息系统的开发中,经常需要获取本地计算机中的树形坦衡目录结构和相应的文件信息,如进行目录的选择和特殊文件的选取,在PowerBuilder(简称PB)中并没有提供专门的树形目录对象,这样就需要程序开发人员自己来实现相应的树形目录。本文针对这种情况,提供了一种用纯PB代码实现树形结构的方法。

2.PB中树形目录的实现方法

PB中实现树形目录可以利用Windows本身的API函数SHBrowseForFolderA(包括在shell32.dll文件中),但该API函数只能显示相应的树形目录,不能显示文件信息,而且用户对它不能进行灵活的控制。因此,如果需要进行灵活控制,就需要程序人员自己编写相应代码。

PB中的ListBox列表框控件提供了显示目录和文件的能力。在程序中可以利用PB的树形控件TreeView动态生成树形目录结构。我们使用ListBox控件的函数DirList来实现,函数DirList以满足条件的文件名填充列表框的列表项,其使用方法如下:

listboxname.DirList(文件模式,文件类型)

其中文件类型的值如下所示:

0 可读/可写文件 2 隐含文件 16 子目录 16384 驱动器

1 只读文件 4 系统文件 32 归档文件 32768 除可读/可写外所有类型

在程序中可将几种类型的值相加以获取相应的文件或目录信息。下面结合一个实例介绍树形目录的实现方法,程序界面如图1所示。

图1 树形目录实现的实例

通过树形目录可以获取计算机中的任意目录,然后显示需要显示的消信巧文件(本例中显示浏览器可以查看的文件类型:htm,html,swf,gif,jpg,txt等)。程序中主要使用的控件如下所示:

控件名 类型 说明

tv_dir TreeView 显示树形目录拿键

lb_file ListBox 显示相应目录中的文件

ole_disp Microsoft Web浏览器控件 对选定文件进行浏览

lb_dir ListBox 显示驱动器信息

lb_next ListBox 显示当前目录下级目录信息

当然在理论上是可以实现的,可以将所有的子文件都以树形结构出来,但是文件很多的时候就会非常纠结

我理解中的树形结构大概是这样(不知道这样的图形是不是你想要的)

a

|

------------------

| | |

b cd

以下是代码,找了系统盘下子文件较少的文件夹 C:/Windows/AppPatch,当然也可以换成你自己的路径来测试

import java.io.File

public class FileTree {

/**

* @param args

*/

public static void main(String[] args) {

try{

File file = new File("C:\\Windows\\AppPatch")

if(file.isDirectory()){

String[] fileList = file.list()

String fileName = file.getName()

int allLength = 0

for(int i=0i<fileList.lengthi++){

allLength += (fileList[i]+" ").length()

}

for(int i=0i<allLength/2i++){

System.out.print("纯激 ")

}

System.out.println(fileName)

for(int i=0i<allLength/2i++){

System.out.print(" ")

}

for(int i=0i<fileName.length()/2i++){

System.out.print(" ")

}

System.out.println("|")

for(int i=0i<allLengthi++){

System.out.print("-")

}

System.out.println("")

for(int i=0i<fileList.lengthi++){

int tmpLength = fileList[i].length()

int subLength = tmpLength/2

int lastLength = tmpLength - subLength - 1

for(int j=0j<subLengthj++){

System.out.print(" "做裤敬)

}

System.out.print("|")

for(int j=0j<lastLengthj++){

System.out.print("纯慎 ")

}

System.out.print(" ")

}

System.out.println("")

for(int i=0i<fileList.lengthi++){

System.out.print(fileList[i]+" ")

}

}

else{

System.out.println("对不起,你提供的路径不是文件夹")

}

}

catch (Exception e) {

e.printStackTrace()

}

}

}

这时可以发现输出每一个子文件/子文件夹的名字已经比较长,要是再想输出这些子文件夹里面的文件,那幅图个人觉得相当纠结,也许是我水平没够吧或是我理解错了你说的树形结构

希望以上代码对你有帮助

不建议做单表自联结,还是用单独的映射表比较帆腔好举轿斗

比如

部门表

ID 名称

部门映射表

父ID 子ID

然后正磨通过映射表内联父子来递归出树形结构。

无分无码


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/yw/12267909.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-24
下一篇 2023-05-24

发表评论

登录后才能评论

评论列表(0条)

保存