怎样得到当前盘下的目录,或者当前目录下的子目录?急!

991zwl 2002-02-24 10:58:24
是用API函数吗?
...全文
31 点赞 收藏 7
写回复
7 条回复
切换为时间正序
当前发帖距今超过3年,不再开放新的回复
发表回复
zyqherozyqhero 2002-02-25
同意 programbcb(datawindow)意见
回复
sorrow_arrow 2002-02-25
收藏先
回复
daiwoo_wang 2002-02-25
补充:如果将盘符图片放在DDPLB中,效果更好,可以查到包括网络驱动器在内的所有类型
回复
daiwoo_wang 2002-02-25
可以这样解决:
建窗口,其上有DDPLB(图形下拉框),LB控件,窗口的OPEN事件中如下:
String ls_Item
Integer li_Index, li_Drives, li_DriveType
String ls_Drive

this.inv_base.of_Center()

lb_file.DirList("*.*",49152,st_curr_path)

li_Drives = lb_file.TotalItems()
For li_Index = 1 To li_Drives
ls_Drive = mid(lb_file.text(li_index),3,1)
li_DriveType = wf_get_drive_index(ls_Drive)
ddplb_drive.AddItem(ls_Drive + ":\", li_DriveType)
Next

DDPLB的SELECTIONCHANGED事件如下:
String ls_CurPath

ls_CurPath = this.Text
ii_level = 1
is_parentpath[ii_level] = ls_Curpath

lb_file.Reset()
lb_file.DirList(ls_CurPath + "*.*", 32784)

lb_1.DirList(ls_CurPath + "*.*", 32784)

窗口函数WF_GET_DRIVE_INDEX(STRING AS_DRIVE)函数如下:
Uint lui_RC
string drv_name

as_drive = upper(as_drive) + ":\"

lui_RC = GetDriveTypeA (as_drive)

Choose Case lui_RC
Case 2
Return 1

Case 3
Return 2

Case 4
Return 3

Case 5
Return 4

Case Else
Return 0
End Choose

窗口定义实例变量
string is_parentpath[]
integer ii_level

注意定义API函数:
FUNCTION ulong GetDriveTypeA(ref string nDrive) LIBRARY "kernel32.DLL"

在选择路径的确定按钮中可以如下写:
string s_path
int i

i = UPPERBOUND(is_parentpath)

s_path = lb_1.selecteditem()

IF i > 0 THEN
s_path = is_parentpath[i] + mid(s_path,2,len(s_path) - 2)
ELSE
s_path = ''
END IF


IF right(s_path,1) <> '\' AND len(s_path) >0 THEN
s_path = s_path + "\"
END IF

IF len(s_path) = 0 THEN
messagebox("系统提示","请选择一个目录!",Stopsign!)
ELSE
CloseWithReturn(parent,s_path)
END IF

以上在PB7中通过,我放在了我的公共库中,以后都可以用了,嘿嘿.
另外窗口OPEN事件中的INV_BASE.OF_CENTER()是PFC的函数,没有用PFC的同志可以将其去掉,其他不变!

回复
pbworm 2002-02-24
使用listBox的dirlist函数就可以了,具体怎么用你自己查一下帮助
回复
programbcb 2002-02-24
API函数可以得到的FUNCTION boolean SetCurrentDirectoryA(ref string cdir) LIBRARY "kernel32.dll"
string ls_Buffer

ls_Buffer=Space(255)

IF GetCurrentDirectoryA(255,ls_Buffer)=0 THEN SetNull(ls_Buffer)

RETURN ls_Buffer
回复
daiwoo_wang 2002-02-24
绝对可以,我用过,具体代码要查一下。看一下PB6自带的例子,可以解决。如果需要,我可以把SCRIP贴上来
回复
相关推荐
发帖
非技术版
创建于2007-09-28

379

社区成员

PowerBuilder 非技术版
申请成为版主
帖子事件
创建了帖子
2002-02-24 10:58
社区公告
暂无公告