我要全盘搜索文件,搜到符合文件并进行处理.
本来很简单,但随着需求变得更细化,出现一个疑问.
我们在全盘文件搜索过程中遇到符合的文件, 就处理(比如 将文件发邮箱到我邮箱)
还是
全盘文件搜索完,将文件名放到列表, 再一次循环,(也可能再小过滤一次) , 将文件从到尾,遂个发我邮箱.
两种思维哪种好?
我一开始想,本来就已用循环 全盘搜索了, 遇到符合条件就该马上处理了,何必再列个列表,再次循环呢?
但遇到符件条件文件我是要发邮件,这会不会卡死,毕竞全盘搜索文件数量大,
而搜出来后放到列表的文件少, 只是多做列表再搜一次的工作.
(想到这就像现在疫情, 要检查一万人,检一个才能让一个过关卡,
是,遇到有体温高的,就马上进一步检测,然后下一个
还是有疑似的也先不处理
先把所有(比如500人)疑似的都先放到一边,全部初测完, 再统一对这500人进一步检查?
(当然现实中是可以并行的.但我做的程序不是多线程)只是说类似的逻辑思维.
建议你用多线程,一个线程把搜好的放到队列,一个线程从队列的路径处理文件。如果不用多线程的话,搜完全部再处理比较好。其实也没有所谓,因为怎样处理感觉问题都不大。你觉得怎样方便就怎么做。还有多写一个循环根本不是啥大问题。
在网上找了不少全盘搜索的代码,要不卡要么不符合我的要求.找到一个试成功.虽然不是完整 .但可以用. 搜索模块代码就不放出来了,不是重点
重点是如何使用部分, 我看不懂原码,但知道怎么用.得按他现有的方式来.
Private Sub Command1_Click()
o.Find "D:\;f:\", *.xls*;*.doc" ' 可用通配符,加分号可多个文件搜索
End Sub
Private Sub o_Found(ByVal filename As String, Cancel As Boolean)
Debug.Print filename
Text1.Text = Text1.Text & filename & vbCrLf '显示效果
mial "主题", filename '作以附件发邮件 mial为另外的邮件函数,略
End Sub
这是原来的
那
就是我只要 设置好我要搜的文件名,全盘搜索,并搜的时候附合条件(如DOC 或XLS文档) 就都 马上发邮件了.
思维简单,我也不用再改代码.(只拿c:\测试 一个文件夹里面十来个文件试过,不算卡,但全盘就没试了)
但后来发现,我 搜出来的文件 ,还要有不同的处理
就改一下
Private Sub o_Found(ByVal filename As String, Cancel As Boolean)
Debug.Print filename
Text1.Text = Text1.Text & filename & vbCrLf
Dim fname
fname = Split(filename, "\")(UBound(Split(filename, "\"))) '去掉目录, 只取 文件名字
''1'如果情况一,执行以下处理: 如果文件名含有 "笔记"\"日记" "客户"
If InStr(fname, "笔记") Or InStr(fname, "日记") Or InStr(fname, "客户") > 0 Then '没有区分word,还是.XLS ,有关键字就上传
Text2.Text = Text2.Text & filename & vbCrLf & vbCrLf '显示附合条件文件 ,测试时查看
'以下为执行代码
If FileLen(filename) > 10000 Then '判断太小,小于10K的文件就不要发邮件了
mial filename, filename '先测试发送
End If
End If
'2''如果情况二, 执行以下处理: "2009" "2010"的文件不要了.
On Error Resume Next
If InStr(fname, "2009") Or InStr(fname, "2010") Or InStr(fname, "毕业照") Or InStr(fname, "过期") > 0 Then
If Dir("d:\20011.毕业", vbNormal Or vbHidden Or vbSystem) > "" Then '再次确认,这有个文件夹说明是我家里的老电脑, 才这样做,不然有危险,不要在我现电脑上执行
'Kill filename '直接清除,不要再保存已不用的电脑上.
End If
End If
' Cancel = True '中止
End Sub
本来,如果按正常思路,
应该是
1搜索 符合条件文件 (本身这里就可以通配符)
2得出符合的文件
3 处理这些文件
那么我就可以设定不同时间或按顺序, 搜自己设定想要的不同类型文件,反复用上面的逻辑思路就好
那么现在,是这样的了
1\ 搜索所有自己可能要用的文件
2\ 在搜索过程中, 搜出符合条件的文件,
然后, 再IF判断是哪一类文件,分别 归类处理 (如是发邮件,或还是删除)
3\继续搜索下一个文件直到结束.
这两种 方式,实际运用种 哪种好.第二种是我现在已成的代码, 刚开始以为简单,但事实上我还有别的文件不同处理方式,反而思维容易乱.
而且还是担心还样是不是会卡?
虽然我在原来的搜索代码中加了 DoEvents.