深圳开幼儿园条件具备:VFP如何返回多个文件名---百元赏解

来源:百度文库 编辑:查人人中国名人网 时间:2024/05/09 06:26:03
本人想用VFP做一个MP3播放器,遇到难点,查了半年资料也没有解决,差点没发誓永远不用VFP!请各位高手指点,明明白白告诉我,不胜感激,赏解100元,就在VFP里如何用编程方法一次返回多个文件名?
类似getfile() putfile()的函数,但它每次只能返回一个文件名,有没有可以返回多个文件名的?

你的问题就是历尽文件夹下所有文件的问题。
可以使用ADIR()函数解决
如果是多层文件夹,就需要采用递归调用的方式.

ADIR()函数用法:
Adir(ArrayName [, cFileSkeleton [, cAttribute [, cCreatorType]]])
使用:
X=Adir(Myml,′C:\TEMP\*.DBF′)
返回:
X=符合cFileSkeleton条件的文件或目录个数
Myml是一个有五列内容的数组,这五列的含义是:
1 文件名 字符型
2 文件大小 数值型
3 文件日期 日期型
4 文件时间 字符型
5 文件属性 字符型
例:我们想得到某个文件的大小或文件的修改日期及属性:
X=Adir(Myml,′C:\TEMP\abc.DBF′)
IF X〈〉0
wjsize=Myml(1,2) &&取得文件大小
wjdate=Myml(1,3)
&&取得修改日期及属性
wjAttr=Myml(1,5) &&取得文件属性
ELSE
wait wind ′没有您指定的文件′
ENDIF
文件属性的含义:
A 档案文件(可读写)
H 隐藏文件
R 只读文件
S 系统文件
D 目录或文件夹

以下是我的一个遍历文件夹下多个文件的自定义函数,如果你有多个目录可以采用递归调用的办法来实现。
parameters fdira,fpath,ftypc1,ftypc2,ftypc3,ftypc4,layer
local fifm[1],dfc,i
if parameters()<7
layer=0
endif
if right(fpath,1)#"\"
fpath=fpath+"\"
endif

if layer=0
declare fdira[1]
fc=0
if directory(fpath)
fdira[1]=fpath
else
return 0
endif
else
declare fdira[Alen(fdira)+1]
fdira[Alen(fdira)]=fpath
endif

dfc=adir(fifm,fpath+"*.*","DHS")
for i=1 to dfc

if "D"$fifm[i,5] .AND. !fifm[i,1]=="." .AND. !fifm[i,1]==".."
&&append blank
&&replace fp with fpath, fn with fifm[i,1],fs with fifm[i,2],ft with ctot(dtoc(fifm[i,3])+" "+fifm[i,4]),fa with "文件夹"
thisform.lallf(@fdira,fpath+fifm[i,1],ftypc1,ftypc2,ftypc3,ftypc4,layer+1)
endif

if !"D"$fifm[i,5] .AND. !fifm[i,1]=="." .AND. !fifm[i,1]==".."
if !empty(ftypc1)
if &ftypc1
append blank
replace fp with fpath, fn with fifm[i,1],fs with fifm[i,2],ft with ctot(dtoc(fifm[i,3])+" "+fifm[i,4]),fa with fifm[i,5]
endif
endif
if !empty(ftypc2)
if &ftypc2
append blank
replace fp with fpath, fn with fifm[i,1],fs with fifm[i,2],ft with ctot(dtoc(fifm[i,3])+" "+fifm[i,4]),fa with fifm[i,5]
endif
endif
if !empty(ftypc3)
if &ftypc3
append blank
replace fp with fpath, fn with fifm[i,1],fs with fifm[i,2],ft with ctot(dtoc(fifm[i,3])+" "+fifm[i,4]),fa with fifm[i,5]
endif
endif
if !empty(ftypc4)
if &ftypc4
append blank
replace fp with fpath, fn with fifm[i,1],fs with fifm[i,2],ft with ctot(dtoc(fifm[i,3])+" "+fifm[i,4]),fa with fifm[i,5]
endif
endif
if thisform.check5.value=1
append blank
replace fp with fpath, fn with fifm[i,1],fs with fifm[i,2],ft with ctot(dtoc(fifm[i,3])+" "+fifm[i,4]),fa with fifm[i,5]
endif
endif
endfor
return alen(fdira)

一次怎么能返回多个文件名?打开目录不行吗?GETDIR(),要不就把getfile()放到循环里面.想返回多少就返回多少.