递归搜索文件夹中的照片

编码中经常需要搜索文件夹中特定文件,文件可能在子文件夹中,这时候需要用到递归搜索,下面的函数可以实现这个功能,其中:

pic表包含身份证号、学号、班级列。照片用身份证号或学号命名。照片按班级分类存储。

n_dir_index用于区别递归中产生的数组名,防止冲突。

每进入1层,将ltLevel减1,直至小于lsLelel,调用时,lsLevel一般设置为1。

代码中有调整图片大小的函数resizeimage和转换格式的函数saveimage。

其中也包括一些全局变量参数,用于区别操作。

Function FindFile
	Parameters lsLevel,ltLevel,lcPath
	If ltLevel<lsLevel
		Return
	Endif
	Local	m_name
	m_name="m"+Alltrim(Str(n_dir_index))
	n_dir_index = n_dir_index+1
	Local i,c_ext_name,c_file_name,s_image_file,c_image_bj,c_sfz,c_xh,c_tmp_file,p_tmp_file,c_image_file
	Adir(&m_name,lcPath+"\*.*","D")
	Select pic
	If Type("&m_name")<>"U"
		For i=1 To Alen(&m_name)/5
			If &m_name(i,1)="." Or &m_name(i,1)=".."
				Loop
			Endif
			If &m_name(i,5)="....D"
				*子文件夹
				FindFile(lsLevel,ltLevel-1,lcPath+"\"+&m_name(i,1))
			Else
				c_ext_name=Lower(Justext(&m_name(i,1)))
				If Empty(c_ext_name)
					Loop
				Endif
				c_file_name=Lower(Left(&m_name(i,1),Len(&m_name(i,1))-Len(c_ext_name)-1))	&& 身份证号或学号
				If c_ext_name<>"jpg" And c_ext_name<>"gif" And c_ext_name<>"png"
					Loop
				Endif
				If	n_image_type=1	And c_ext_name<>"jpg"
					Loop
				Endif
				If	n_image_type=2	And c_ext_name<>"gif"
					Loop
				Endif
				If	n_image_type=3	And c_ext_name<>"png"
					Loop
				Endif
				s_image_file=lcPath+"\"+&m_name(i,1)
				If File(s_image_file)
					Do Case
					Case	n_source=1
						Locate For Lower(Alltrim(身份证号))=c_file_name
					Case	n_source=2
						Locate For Lower(Alltrim(学号))=c_file_name
					Case	n_source=3
						Locate For Lower(Alltrim(身份证号))=c_file_name Or Lower(Alltrim(学号))=c_file_name
					Endcase
					If !Eof()
						c_image_bj		=Alltrim(班级)
						Try
							Md Testdir+"\Photo\"+c_image_bj
						Catch
						Endtry
						c_sfz			=Lower(Alltrim(身份证号))
						c_image_file		=Testdir+"\Photo\"+c_image_bj+"\"+c_sfz+".jpg"	&&
						c_xh			=Lower(Alltrim(学号))
						If n_replace =1	&& 覆盖方式
							Try
								Delete File Testdir+"\Photo\"+c_image_bj+"\"+c_sfz+".jpg"
							Catch
							Endtry
						Endif
						If !File(c_image_file)
							c_tmp_file=Getenv("TEMP")+"\"+c_file_name+".jpg"
							p_tmp_file=Getenv("TEMP")+"\p_"+c_file_name+".jpg"
							Try
								Delete File "&p_tmp_file"
							Catch
							Endtry
							If c_ext_name<>"jpg"
	*转换格式
								Try
									Delete File "&c_tmp_file"
								Catch
								Endtry
								=saveimage(s_image_file,c_tmp_file)
								=resizeimage(c_tmp_file,p_tmp_file,system_photo_width,system_photo_height)
								Try
									Delete File "&c_tmp_file"
								Catch
								Endtry
							Else
								=resizeimage(s_image_file,p_tmp_file,system_photo_width,system_photo_height)
							Endif
							If	File(p_tmp_file)
								Copy File "&p_tmp_file" To "&c_image_file"
							Endif
							Try
								Delete File "&p_tmp_file"
							Catch
							Endtry
							n_count = n_count +1
						Endif
					Endif
				Endif
			Endif
		Endfor
	Endif
Endfunc

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

丁亚涛

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值