狐友群里面刚好在聊这个问题。
梁林一【实易软件】:
vfp 的 getfile() 只能选择一个文件,不支持多选吗?
上传附件,想一次多选几个文件,调用哪个 win API?
vfp 项目管理器里,添加文件,就可以多选,与getfile()表面上一样一样的,应该是调用的同一个 win API,但做了不同的封装。
猫猫以前收藏的函数,派上用场了,就发到了群里面。
FUNCTION _GetOpenFileNames(szInitDir, szFileName, szFilter)
LOCAL oFile
oFile = CREATEOBJECT("MSComDlg.CommonDialog.1")
oFile.Flags = 0x00080204 && 0x00080000 or 0x00000200 or 0x00000004
oFile.Filter = szFilter
oFile.maxFileSize = 10000
oFile.InitDir = szInitDir
oFile.FileName = szFileName
oFile.ShowOpen()
RETURN oFile.FileName
ENDFUNC
*--调用方法
mystr=_GetOpenFileNames("c:", "", "jpg|*.jpg")
然后,梁总贴心的总结了一下:
用 _GetOpenFileNames(szInitDir, szFileName, szFilter) 一次选择多个附件,
返回值看上去是以一个空格分隔,其实是以 chr(0) 分隔,第一个值是路径,其他的值是选择的多个文件名
getwordnum() 的第三个参数即分隔符 chr(0) 无效,所以 getwordnum() 分不开返回值
可以用 aLine() 以 cha(0) 分隔将返回值赋予数组
或者用 strtran() 将 chr(0) 替换为|,然后再用 getwordnum() 分解返回值
copy、wait window 等,遇到 chr(0) 则至此截断,后面的部分被忽略
为什么用chr(0) 来分隔文个名呢?
文件或路径带空格,用括号括起来,或用引号引起来。正是因为文件名或路径允许有空格,返回值才不能以空格分隔,而用了chr(0) 来分隔多个文件名。