编程思维问题: 全盘搜索文件马上处理好,还是搜索完归类列表再处理好

我要全盘搜索文件,搜到符合文件并进行处理.
本来很简单,但随着需求变得更细化,出现一个疑问.

我们在全盘文件搜索过程中遇到符合的文件, 就处理(比如 将文件发邮箱到我邮箱)

还是

全盘文件搜索完,将文件名放到列表, 再一次循环,(也可能再小过滤一次) , 将文件从到尾,遂个发我邮箱.

两种思维哪种好?

我一开始想,本来就已用循环 全盘搜索了, 遇到符合条件就该马上处理了,何必再列个列表,再次循环呢?
但遇到符件条件文件我是要发邮件,这会不会卡死,毕竞全盘搜索文件数量大,
而搜出来后放到列表的文件少, 只是多做列表再搜一次的工作.

(想到这就像现在疫情, 要检查一万人,检一个才能让一个过关卡,
是,遇到有体温高的,就马上进一步检测,然后下一个
还是有疑似的也先不处理
先把所有(比如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.