注册 登录
编程论坛 VFP论坛

历遍文件夹中图片问题

dbf永动机 发布于 2023-08-16 13:28, 982 次点击
请问,如果有个文件夹,里面还有子文件夹,里面全部都是jpg格式的图片,并且名称的位数都是一样的,由数字和字母组成,如何历遍所有文件夹中图片并且把文件名生成到dbf表中呢?
10 回复
#2
csyx2023-08-16 14:19
程序代码:
Close Databases
Create Cursor ttt (file V(50), folder V(200))

cRoot = GetDir('', 'aaaa','bbbbbbb', 64)
If !Empty(cRoot)
    GetFileList(cRoot, 'ttt')
EndIf
Select ttt
Locate
Browse

Function GetFileList(tcRoot, tcTag)
    Local cCurdir, ii
    Local array aFiles[1]
   
    m.cCurdir = Sys(5) + Curdir()
    Set Default To (m.tcRoot)
    For m.ii = 1 to ADir(m.aFiles, '*.jpg')
        Insert into (m.tcTag) Values (m.aFiles[m.ii,1], m.tcRoot)
    EndFor
    For m.ii = 1 to ADir(m.aFiles, '', 'D')
        If !InList(m.aFiles[m.ii,1], '.','..')
            GetFileList(Addbs(m.tcRoot) + m.aFiles[m.ii,1], m.tcTag)
        EndIf
    EndFor
    Set Default To (m.cCurdir)
EndFunc


[此贴子已经被作者于2023-8-16 14:20编辑过]

#3
dbf永动机2023-08-16 14:41
回复 2楼 csyx
所以,如何用这个代码实现呢?复制到txt文档?用vfp打开不管用啊
#4
csyx2023-08-16 15:06
自然是保存为 prg 并执行,这这这~还用说吗?
#5
吹水佬2023-08-16 15:13
遍历磁盘文件
** test.prg
程序代码:

CREATE CURSOR fn (fname M)
getFiles("d:", "*.jpg")
SELECT LEFT(fname,100), fname FROM fn
RETURN

FUNCTION getFiles(cPath, cType)
    CREATE CURSOR fp (fpath M)
    INSERT INTO fp VALUES (ADDBS(cPath))
    DO WHILE !EOF("fp")
        n = RECNO("fp")
        cPath = fp.fpath
        FOR i=1 TO ADIR(arr, cPath+"*.", "RASHD", 1)
            IF !INLIST(arr[i,1],".","..")
                INSERT INTO fp VALUES (cPath + arr[i,1] + "\")
            ENDIF
        ENDFOR
        GO n IN fp
        SKIP IN fp
    ENDDO
    SELECT fp
    SCAN     
        FOR i=1 TO ADIR(arr, fp.fpath+cType, "RASHD", 1)
            IF !INLIST(arr[i,1],".","..") AND !RIGHT(arr[i,5],1) == "D"
                INSERT INTO fn VALUES (fp.fpath + arr[i,1])
            ENDIF
        ENDFOR
    ENDSCAN
ENDFUNC

#6
dbf永动机2023-08-16 15:30
回复 5楼 吹水佬
只有本站会员才能查看附件,请 登录

我把代码放到和文件夹并列的位置,执行之后就是这样,关掉vpf还提示不能关闭vpf。
#7
吹水佬2023-08-16 15:37
以下是引用dbf永动机在2023-8-16 15:30:16的发言:


我把代码放到和文件夹并列的位置,执行之后就是这样,关掉vpf还提示不能关闭vpf。

不能照搬 getFiles("d:", "*.jpg")
是不是没有d盘,或者d盘没有jpg
关掉查询窗口就可以关VFP

[此贴子已经被作者于2023-8-16 15:38编辑过]

#8
dbf永动机2023-08-16 15:42
回复 7楼 吹水佬
所以,图片文件夹和代码都放在d盘根目录就行吗?如果放在d盘photo文件夹里面,代码是不是要改成d:/photo   对吗?
#9
dbf永动机2023-08-16 15:56
回复 7楼 吹水佬
的确没有d盘,不过我已经掌握了修改路径的关键点,并且成功输出了表格,但是fname里面都是memo,不过我可以从路径里面截取我想要的文件名字段,因为他们的长度都是一样的,截取并不复杂。
#10
吹水佬2023-08-16 16:11
以下是引用dbf永动机在2023-8-16 15:42:06的发言:

所以,图片文件夹和代码都放在d盘根目录就行吗?如果放在d盘photo文件夹里面,代码是不是要改成d:/photo   对吗?

是遍历指定目录及所有子目录,如果不要遍历子目录,可以加个参数标志作为不循环遍历下一条目录的选择。
#11
吹水佬2023-08-16 16:13
以下是引用dbf永动机在2023-8-16 15:56:13的发言:

的确没有d盘,不过我已经掌握了修改路径的关键点,并且成功输出了表格,但是fname里面都是memo,不过我可以从路径里面截取我想要的文件名字段,因为他们的长度都是一样的,截取并不复杂。

有些路径长度超过C类型字段限制,要用M类型。
1